【发布时间】:2017-02-24 18:39:18
【问题描述】:
我需要一些帮助,从存储 XML 数据的 nvarchar(max) 列中提取数据。
这是示例数据。
<ArrayOfstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<string>B1-10</string>
<string>B2-20</string>
<string>B2-20</string>
</ArrayOfstring>
我已经尝试过了,只返回 NULL 的然后错误输出到“XML 解析:第 1 行,字符 2,非法限定名称字符”
SELECT cast(COLUMNNAME AS xml).value('/ArrayOfString[1]/String[1]', 'VARCHAR(MAX)')
FROM dbo.TABLENAME
我在这个很棒的网站上尝试了很多想法,似乎都得到了相同的结果。我在这里想念什么?提前感谢您的帮助。
【问题讨论】:
-
如果您说列存储 XML 类型,我不确定您为什么要转换 XML?
-
如果您需要 XML 数据作为关系数据,您可以查看此帖子 stackoverflow.com/questions/38826788/…
-
出于好奇,您是否尝试过首先将值包装在 CAST AS VARCHAR(4000) 中以“向下转换”它?
-
我确实尝试过“向下投射”,结果相同。感谢您的意见。
-
我在尝试将字符串转换为 xml 时经常遇到这个“非法字符”错误。那里通常有一些(有时是不可见的)角色。一旦找到非法字符,我就使用 REPLACE() 去除它们。粘贴到 NotePad++ 之类的东西会有所帮助。我有两个例子是 REPLACE(@v, CHAR(0), CHAR(32)) - 消除尾随空值(来自 blob/二进制列)和 REPLACE(@v, '', '7' ) -- 消除非法的 xml 字符 7 ...一些序列化层将 放入。所以寻找这样的东西。
标签: sql-server xml tsql xml-parsing