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

标签 sql-server xml xquery

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

但是,我的 XML 数据包含一些 namespace 信息(我认为这很常见),并且只有在删除这些信息时查询才有效。示例:

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:”,我会得到正确的结果。

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

最佳答案

您需要使用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);

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

关于sql-server - SQL Server XQuery - 仅适用于删除命名空间声明的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19960595/

相关文章:

sql-server - SQL Server 存储过程中的 CASE 语句出现问题

sql-server - SQL Server 相当于 Oracle 的 “when no data found” 异常

nosql - MarkLogic:在单个事务中提交多个语句

sql-server - 查询从 "For XML PATH "中删除第一个值

sql - TSQL - 在初始查询中运行 "duplicates"/误报的日期比较?

python 在 xml 文件中编码'(引用)

sql - TSQL-无法解析 XML(命名空间)

python - awk 双引号字段分隔符

javascript - 带有 XQIB 的 REST 调用报告功能发送请求不可用

xquery - 使用 XQuery 以对象格式获取单个记录而不是数组的 JSON 输出