gpt4 book ai didi

sql - 查询具有 xmlns 节点属性的 XML 数据类型

转载 作者:数据小太阳 更新时间:2023-10-29 01:44:19 25 4
gpt4 key购买 nike

我有以下 SQL 查询:

DECLARE @XMLDOC XML
SET @XMLDOC = '<Feed><Product><Name>Foo</Name></Product></Feed>'

SELECT x.u.value('Name[1]', 'varchar(100)') as Name
from @XMLDOC.nodes('/Feed/Product') x(u)

返回:

Name
----
Foo

但是,如果我的 <Feed>节点有一个 xmlns属性,那么这不会返回任何结果:

DECLARE @XMLDOC XML
SET @XMLDOC = '<Feed xmlns="bar"><Product><Name>Foo</Name></Product></Feed>'

SELECT x.u.value('Name[1]', 'varchar(100)') as Name
from @XMLDOC.nodes('/Feed/Product') x(u)

返回:

Name
----

这只有在我有 xmlns 时才会发生属性,其他任何东西都可以正常工作。

这是为什么,我如何修改我的 SQL 查询以返回结果而不考虑属性?

最佳答案

如果您的 XML 文档具有 XML namespace ,那么您需要在查询中考虑这些 namespace !

因此,如果您的 XML 看起来像您的示例,那么您需要:

-- define the default XML namespace to use
;WITH XMLNAMESPACES(DEFAULT 'bar')
SELECT
x.u.value('Name[1]', 'varchar(100)') as Name
from
@XMLDOC.nodes('/Feed/Product') x(u)

或者,如果您希望明确控制要使用的 XML 命名空间(例如,如果您有多个命名空间),请使用 XML 命名空间前缀:

-- define the XML namespace 
;WITH XMLNAMESPACES('bar' as b)
SELECT
x.u.value('b:Name[1]', 'varchar(100)') as Name
from
@XMLDOC.nodes('/b:Feed/b:Product') x(u)

关于sql - 查询具有 xmlns 节点属性的 XML 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16461834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com