【发布时间】:2013-01-08 17:12:47
【问题描述】:
在对具有空命名空间的节点的 XML 字段执行 Xpath 查询时,我在 SQL Server 2008 R2 上遇到了一个奇怪的行为。
此查询不返回结果:
[xml_field].query('/RootNode/NodeWithEmptyNamespace')
此查询返回结果:
[xml_field].query('/dft:RootNode/NodeWithEmptyNamespace')
为澄清起见,此查询还返回结果,因此根节点(可能还有默认命名空间)不需要前缀:
[xml_field].query('/RootNode')
根据XML namespace default documation,当定义空命名空间时,命名空间为无。
数据库中的XML如下:
<RootNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org">
<otherNode>Dummy data</otherNode>
<NodeWithEmptyNamespace xmlns="">Other dummy data</NodeWithEmptyNamespace>
</RootNode>
完整的查询:
WITH XMLNAMESPACES ('http://tempuri.org' as dft)
SELECT TOP 150 [ID],
[xml_field].query('/dft:RootNode/NodeWithEmptyNamespace')
FROM [database];
有人对此行为有解释吗?还是这是一个错误?
【问题讨论】:
-
<RootNode>有一个非空的 XML 命名空间 - 所以你必须定义和使用它 - 我不明白你的问题到底是什么..... -
我的问题不清楚,/RootNode和/dft:RootNode都返回RootNode,所以不需要前缀。
标签: sql-server xml xpath sql-server-2008-r2