【问题标题】:How to extract data from XML: Error A string literal was expected如何从 XML 中提取数据:错误应为字符串文字
【发布时间】:2020-09-17 07:10:29
【问题描述】:

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

消息 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-server xml


    【解决方案1】:

    由于 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)
    

    如果你想在参数值中使用双引号,你必须用&amp;quot; 转义它们。另请查看Escape double quote character in XML,了解有关在 XML 中转义特殊字符的更多信息。

    【讨论】:

    • ---我想保持我的xml原样然后删除斜线?
    猜你喜欢
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 2013-05-02
    • 2013-07-22
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多