SQL Server XQuery - 仅适用于删除的命名空间声明

时间:2013-11-13 17:37:09

标签: sql-server xml xquery

我对XQuery完全是绿色的。我的代码直接来自这篇文章: SQL server xquery

但是,我的XML数据包含一些命名空间信息(我认为这是非常常见的),并且查询仅在我删除它们时才有效。例如:

declare @x xml=
'<WeatherReturn
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://ws.cdyne.com/WeatherWS/">
    <City>Dallas</City>
    <State>TX</State>
    <Temperature>55</Temperature>
</WeatherReturn>'

select  t.s.value('City[1]','nvarchar(20)') [City],
        t.s.value('State[1]','nvarchar(20)') [State],
        t.s.value('Temperature[1]','nvarchar(20)') [Temperature]
from    @x.nodes('WeatherReturn') t(s)

按原样,查询返回三个空白列。但删除3“xmlns:”行,我得到了正确的结果。

有人可以解释一下这种行为以及我需要做些什么来克服它吗?感谢

1 个答案:

答案 0 :(得分:3)

您需要使用WITH XMLNAMESPACES

WITH XMLNAMESPACES (DEFAULT 'http://ws.cdyne.com/WeatherWS/')
select  t.s.value('City[1]','nvarchar(20)') [City],
        t.s.value('State[1]','nvarchar(20)') [State],
        t.s.value('Temperature[1]','nvarchar(20)') [Temperature]
from    @x.nodes('WeatherReturn') t(s);

(确保前面的语句以分号结束)

相关问题