首页 > 解决方案 > 如何从 XML 中提取数据:错误应为字符串文字

问题描述

下面是我的代码。在下面运行代码时出现错误

消息 9413,级别 16,状态 1,第 2
行 XML 解析:第 1 行,字符 33,应为字符串文字

if object_id('tempdb..##DataSource') is not null
begin
    drop table ##DataSource
end

CREATE TABLE ##DataSource
(
    ParameterValue bigint,
    Source nvarchar(100)
)
 
DECLARE  @XMLStringDataSource XML  = '<ROOT><data><row ParameterValue=\"12345678\" Source=\"Intake\"/><row ParameterValue=\"44444444\" Source=\"Intake\"/> </data></ROOT>'

INSERT INTO ##DataSource (ParameterValue,Source)
SELECT 
ParameterValue = XTBl.XCol.value('@ParameterValue','bigint') ,
Source = XTBl.XCol.value('@Source','nvarchar(100)')
FROM  @XMLStringDataSource.nodes('ROOT/data/row')  XTbl(XCol)

标签: sql-serverxml

解决方案


\"由于XML 文档中的转义双引号 ( ) 引发了错误。只需删除反斜杠\,脚本就可以工作了。

if object_id('tempdb..##DataSource') is not null
begin
    drop table ##DataSource
end

CREATE TABLE ##DataSource
(
    ParameterValue bigint,
    Source nvarchar(100)
)
 
DECLARE  @XMLStringDataSource XML  = '<ROOT><data><row ParameterValue="12345678" Source="Intake"/><row ParameterValue="44444444" Source="Intake"/> </data></ROOT>'

INSERT INTO ##DataSource (ParameterValue,Source)
SELECT 
ParameterValue = XTBl.XCol.value('@ParameterValue','bigint') ,
Source = XTBl.XCol.value('@Source','nvarchar(100)')
FROM  @XMLStringDataSource.nodes('ROOT/data/row')  XTbl(XCol)

如果要在参数值中使用双引号,则必须使用&quot;. 另请查看Escape double quote character in XML以获取有关在 XML 中转义特殊字符的更多信息。


推荐阅读