TSQL - 从格式错误的XML字符串中删除非法字符

时间:2015-09-02 17:18:26

标签: sql sql-server xml tsql

convert-string-to-xml-illegal-characters的启发 我想知道纯T-SQL是否有办法将格式错误的XML字符串转换为格式良好的版本。

我有NVARCHAR,如:

DECLARE @string NVARCHAR(MAX) =
   N'<root>
        <stuff attrib="Ooop,bad character<">
            <test>Here I get &, and "<" or ">>>>" </test>
            <test2>And even more <<<>><><<<><> </test2>
       </stuff>
    </root>';

SELECT CONVERT(XML, @string);

当然这会失败,因为&应该被&amp;取代,这很容易。

但是如果在事先不知道结构的情况下将<>置于元素文本或属性中,该如何替换它们?

1 个答案:

答案 0 :(得分:2)

没有一种将字符串更改为有效XML的神奇方法。您必须确保以确保语法正确的方式构建XML字符串。即使您使用&替换所有&amp;的简单方法也无效。考虑这个XML字符串:

<root>
   <stuff>
       <test>Here I get &amp;</test>
   </stuff>
</root>';

简单的替换将导致:

<root>
   <stuff>
       <test>Here I get &amp;amp;</test>
   </stuff>
</root>';

除非您想编写大量代码来将字符串解析为XML,否则您应该:

  • 使用XML方法构建XML
  • 使用其他标准方法,例如select中的FOR XML子句 语句。
  • 确保在构建字符串时确保任何变量部分(标记,属性或数据)符合XML标准,以符合变量部分所代表的内容。例如:将数据变量包装在<![CDATA[ ]]>中或替换变量标签和属性中的无效字符。