我有以下SQL查詢:查詢XML數據類型的屬性
DECLARE @XMLDOC XML
SET @XMLDOC = '<Feed><Product><Name>Foo</Name></Product></Feed>'
SELECT x.u.value('Name[1]', 'varchar(100)') as Name
from @XMLDOC.nodes('/Feed/Product') x(u)
這將返回:
Name
----
Foo
但是,如果我<Feed>
節點有一個xmlns
屬性,那麼這並未不會返回任何結果:
DECLARE @XMLDOC XML
SET @XMLDOC = '<Feed xmlns="bar"><Product><Name>Foo</Name></Product></Feed>'
SELECT x.u.value('Name[1]', 'varchar(100)') as Name
from @XMLDOC.nodes('/Feed/Product') x(u)
返回:
Name
----
這隻會發生,如果我有xmlns
屬性,其他任何工作正常。
這是爲什麼,我該如何修改我的SQL查詢以返回結果,而不考慮屬性?
+1有沒有簡單地忽略xmlns的方法?我試圖將'XML'數據類型轉換爲字符串,去掉xmlns屬性,然後將其轉換回來... – Curt 2013-05-09 13:38:31
我真的不在乎命名空間,這是第三方提供的版本控制xmlns URL,因此很容易發生外部變化 – Curt 2013-05-09 13:39:13
@Curt:不,當XML名稱空間存在於XML中時,不能簡單地忽略它 - 您需要處理它。如果您只有一個XML名稱空間 - 使用方法#1將其定義爲默認的XML名稱空間,並且該名稱空間應該相當簡單易用 – 2013-05-09 14:02:03