2012-08-07 39 views
0

假設我使用同一模式從兩個不同的供應商處獲得兩個不同的xml文檔。他們各自選擇不同的名稱空間前綴。如何在C#和SQL Server中使用XPATH以通用方式查詢「Foo」和「Bar」的值?爲了簡便起見,該XML看起來大致是這樣的:使用更改的名稱空間前綴

文件1

<a:Item xmlns:a="http://kakridge.com/schema">Foo</a:Item> 

文獻2

<b:Item xmlns:b="http://kakridge.com/schema">Bar</a:Item> 

回答

1

XPath不關心什麼前綴出現在源文件,它只關心空間URI。如果前綴z綁定到名稱空間http://kakridge.com/schema,那麼// z:Item將在這兩個文檔中找到Item元素。

+0

瞭解,但如果一個文檔是// z:Item和另一個文檔是// y:Item,那麼您如何整體糾正?這可能是一個實現細節,但我想我忽略前綴並定義我自己的。正如你所說,只要URI匹配,我不會指望它是一個問題。這需要一些研究。 Christian的建議實際上在SQL Server中有效。順便說一下,多年前我喜歡你的XSLT書。 – kakridge 2012-08-07 20:25:21

+0

@kakridge:前綴無關緊要 - 它們可能不同。只要它們綁定到相同的命名空間。你可以在XPath表達式中使用* third *前綴,這兩個前綴(比如''t「')並使用't:Item'。我知道你可能不相信這個 - 試試吧。 – 2012-08-08 03:35:27

+0

我相信。我認爲我目前所遇到的工具大多存在缺陷。 – kakridge 2012-08-08 16:30:00

0

我猜你正在尋找Item的價值,這是Foobar?如果你的元素的本地名稱將是相同的,通配符應該可以幫助您:

//*:Item/text() 
+1

他在微軟的世界裏,Christian,所以我想他的XPath引擎不支持XPath 2.0語法。 – 2012-08-07 20:19:38

+0

感謝您的提示。 – 2012-08-10 20:21:54