SQL和转义的XML数据

时间:2011-02-07 22:17:17

标签: sql sql-server xml

我有一个包含转义和非转义XML的表。当然,我需要的数据是转义的。例如,我有:

<Root>
    <InternalData>
         <Node>
              &lt;ArrayOfComment&gt;
                 &lt;Comment&gt
                    &lt;SequenceNo&gt;1&lt;/SequenceNo&gt;
                    &lt;IsDeleted&gt;false&lt;/IsDeleted&gt;
                    &lt;TakenByCode&gt;397&lt;/TakenByCode&gt;
                 &lt;/Comment&gt
              &lt;/ArrayOfComment&gt;
         </Node>
    </InternalData>
</Root>

如您所见, Node 标记中的数据都已转义。我可以使用查询来获取 Node 数据,但是如何在SQL中将其转换为XML以便可以对其进行解析和分解?我在SQL中使用XML很新,我似乎无法找到任何这方面的例子。

由于

2 个答案:

答案 0 :(得分:4)

您没有提供有关最终目标的足够信息,但这会让您非常接近。 FYI - 你有两个失踪;在comment&gt

之后
declare @xml xml
set @xml = '
<Root>
    <InternalData>
         <Node>
              &lt;ArrayOfComment&gt;
                 &lt;Comment&gt;
                    &lt;SequenceNo&gt;1&lt;/SequenceNo&gt;
                    &lt;IsDeleted&gt;false&lt;/IsDeleted&gt;
                    &lt;TakenByCode&gt;397&lt;/TakenByCode&gt;
                 &lt;/Comment&gt;
              &lt;/ArrayOfComment&gt;
         </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

您可能需要对其进行修改,以便仅解码&gt;&lt;。上面的那个似乎超出了你的需求。

<强>更新

@ Cyber​​kiwi的解决方案似乎有点清洁。如果你运行的SQL Server版本不支持他的解决方案,我会把它留下来。