【问题标题】:issue with xml parsing data to sql queryxml解析数据到sql查询的问题
【发布时间】:2023-03-19 17:32:01
【问题描述】:

我正在处理需要将 xml 解析为 sql 的 SQL 查询。查询适用于其他 xml,但不适用于以下 xml。我正在使用的查询如下

DECLARE @xmldata XML 
SET @xmldata =
N'<SearchProductsResponse xmlns="http://api.abc.com/">
<productItems>
<productItem id="5d0ee86d84bcc5edef43236d61419a59">
<trackingLinks>
<trackingLink adspaceId="100">
<ppv>
 abc.com
</ppv>
<ppc>
abc.com
</ppc>
</trackingLink>
</trackingLinks>
</productItem>
</productItems>
</SearchProductsResponse>';

select
    t1.c.value('@id', 'varchar(300)') as itemid,
    c.c.value('@id', 'int') as adspaceId
from 
    @xmldata.nodes('*:SearchProductsResponse/*:productItems/*:productItem') as t1(c)
    OUTER APPLY t1.c.nodes('*:trackingLinks/*:trackingLink') as c(c)

我得到的输出是

itemid                            adspaceId
5d0ee86d84bcc5edef43236d61419a59    NULL

但我应该返回 100 instead of NULL 。此查询适用于其他 XML,但不知道此 XML 有什么问题。我有仔细检查 XML 并查询与其他 XML 没有什么不同。希望我不会错过一些愚蠢的错误

【问题讨论】:

    标签: sql sql-server xml


    【解决方案1】:

    将您的 adspaceId 列的属性选择更改为 @adspaceId

    select
    t1.c.value('@id', 'varchar(300)') as itemid,
    c.c.value('@adspaceId', 'int') as adspaceId
    from @xmldata.nodes('*:SearchProductsResponse/*:productItems/*:productItem') as t1(c)
    OUTER APPLY t1.c.nodes('*:trackingLinks/*:trackingLink') as c(c)
    

    【讨论】:

    • 哦..我知道这是我的愚蠢错误..感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多