我有下面的代码,当我运行它时会出错,因为它有“&”符号并且无法转换它。
结果应显示“testing &”。但是,如果我将 xml 位更改为“testing &”,它就可以工作。我需要一种方法来替换它,这样它就不会出错。
Declare @Request XML = null
If @Request IS NULL
BEGIN
SET @Request = '
<Request>
<ProductRequest>
<ProductName>testing &</ProductName>
</ProductRequest>
</Request>'
END
select @Request.value ('(//ProductName)[1]','nvarchar(100)')
最佳答案
您可能正在寻找这个:
Declare @Request XML = null
If @Request IS NULL
BEGIN
SET @Request = (SELECT 'testing &' AS ProductName FOR XML PATH('ProductRequest'),ROOT('Request'));
END
select @Request.value ('(//ProductName)[1]','nvarchar(100)')
一些背景:
XML 不仅仅是一些带有额外字符的文本。 XML 永远不应该仅通过键入(如您的情况)或字符串连接(常见)来生成。使用正确的方法生成您的 XML,所有编码问题都会为您隐式解决。
查看生成的 XML,您会发现 &
被发现为 &
。在阅读本文时 value()
重新编码已为您完成 - 再次隐式完成。
你不应该开始做自己的REPLACE
接近。第二天有人输入 <
或>
或者另一个不支持的角色,你又遇到同样的麻烦了。
关于sql-server - 通过XML解析SQL中的字符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40610699/