sql-server - 通过XML解析SQL中的字符错误

标签 sql-server xml t-sql xml-parsing special-characters

我有下面的代码,当我运行它时会出错,因为它有“&”符号并且无法转换它。

结果应显示“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,您会发现 &被发现为 &amp; 。在阅读本文时 value()重新编码已为您完成 - 再次隐式完成。

你不应该开始做自己的REPLACE接近。第二天有人输入 <>或者另一个不支持的角色,你又遇到同样的麻烦了。

关于sql-server - 通过XML解析SQL中的字符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40610699/

相关文章:

t-sql - TSQL 如何查找字符串中的模式?

sql-server - 如何获取特定日期的最后可能时间

sql - 在一个 SELECT 语句中设置两个标量变量?

sql-server - SQL 服务器 : why are sizes of different backups the same?

python - 在命令行中解析 XML 文件(理想情况下是 bash/python)

xml - 如何在 xsd :enumeration 中使用任何字符串

java - Jsp页面不显示修改后的xml文件的内容,直到我手动刷新xml所在的文件夹

sql - 表的增量更新

sql-server - 指定平面文件数据类型与使用数据转换

sql - 根据上述行SQL计算