我有一个包含转义和非转义XML的表。当然,我需要的数据是转义的。例如,我有:
<Root>
<InternalData>
<Node>
<ArrayOfComment>
<Comment>
<SequenceNo>1</SequenceNo>
<IsDeleted>false</IsDeleted>
<TakenByCode>397</TakenByCode>
</Comment>
</ArrayOfComment>
</Node>
</InternalData>
</Root>
如您所见, Node 标记中的数据都已转义。我可以使用查询来获取 Node 数据,但是如何在SQL中将其转换为XML以便可以对其进行解析和分解?我在SQL中使用XML很新,我似乎无法找到任何这方面的例子。
由于
答案 0 :(得分:4)
您没有提供有关最终目标的足够信息,但这会让您非常接近。 FYI - 你有两个失踪;在comment>
declare @xml xml
set @xml = '
<Root>
<InternalData>
<Node>
<ArrayOfComment>
<Comment>
<SequenceNo>1</SequenceNo>
<IsDeleted>false</IsDeleted>
<TakenByCode>397</TakenByCode>
</Comment>
</ArrayOfComment>
</Node>
</InternalData>
</Root>
'
select convert(xml, n.c.value('.', 'varchar(max)'))
from @xml.nodes('Root/InternalData/Node/text()') n(c)
输出
<ArrayOfComment>
<Comment>
<SequenceNo>1</SequenceNo>
<IsDeleted>false</IsDeleted>
<TakenByCode>397</TakenByCode>
</Comment>
</ArrayOfComment>
结果是一个XML列,您可以将其放入变量或直接交叉应用以从XML片段中获取数据。
答案 1 :(得分:0)
您最好的选择可能是查看HTML解码UDF。我做了一个快速搜索,找到了这个:
http://www.andreabertolotto.net/Articles/HTMLDecodeUDF.aspx
您可能需要对其进行修改,以便仅解码>
和<
。上面的那个似乎超出了你的需求。
<强>更新强>
@ Cyberkiwi的解决方案似乎有点清洁。如果你运行的SQL Server版本不支持他的解决方案,我会把它留下来。