在对具有空命名空间的节点的 XML 字段执行 Xpath 查询时,我在 SQL Server 2008 R2 上遇到了一个奇怪的行为。
此查询不返回结果:
[xml_field].query('/RootNode/NodeWithEmptyNamespace')
此查询返回结果:
[xml_field].query('/dft:RootNode/NodeWithEmptyNamespace')
为澄清起见,此查询还返回结果,因此根节点(可能还有默认命名空间)不需要前缀:
[xml_field].query('/RootNode')
根据定义空命名空间时的XML 命名空间默认文档,命名空间为无。
数据库中的 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];
有人对此行为有解释还是这是一个错误?