Microsoft T-SQL XML分析问题

时间:2013-03-21 22:49:36

标签: sql xml sql-server-2008-r2

我的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) 

1 个答案:

答案 0 :(得分:2)

试试这个:


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