在具有空名稱空間的節點的XML字段上執行Xpath查詢時,我在SQL Server 2008 R2上遇到了一個奇怪的行爲。SQL Server查詢XML xpath空名稱空間
此查詢不返回結果:
[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];
沒有人有這種行爲的解釋或者這是一個錯誤?
''有一個非空的XML命名空間 - 所以你必須定義和使用它 - 我不明白你的問題真的是什麼..... –
我的問題不清楚,無論是/ RootNode和/ dft:RootNode返回RootNode,所以前綴不是必需的。 – user823959