1

我有类似于以下的 XML:

DECLARE @XML AS XML = 
'<RootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SubElement xmlns="http://foobar">
    <foo1>bar1</foo1>
  </SubElement>
</RootElement>'

我正在尝试使用以下 SQL 对其进行解析:

; WITH XMLNAMESPACES(DEFAULT 'http://foobar')
SELECT 
    f.x.value('foo1[1]', 'varchar(10)')
from 
    @xml.nodes('/RootElement/SubElement') as f(x)

但这似乎不起作用。SubElement 节点上的 XML 命名空间是否会导致问题?我问是因为以下配置有效:

DECLARE @XML AS XML = 
'<RootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SubElement>
    <foo1>bar1</foo1>
  </SubElement>
</RootElement>'

SELECT 
    f.x.value('foo1[1]', 'varchar(10)')
from 
    @xml.nodes('/RootElement/SubElement') as f(x)

供参考:

select @@VERSION

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)   Jun 17 2011 00:54:03   Copyright (c) Microsoft Corporation  Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) 
4

1 回答 1

2

尝试这个:


; WITH XMLNAMESPACES('http://foobar' as Y)
SELECT 
    f.x.value('.', 'varchar(10)')
from 
    @xml.nodes('/RootElement/Y:SubElement') as f(x)
于 2013-03-21T23:41:02.690 回答