2009-12-17 117 views
4

給出的以下XML標記:爲什麼我必須將空名稱空間傳遞給XPathNavigator.GetAttribute?

<root xmlns="Demo"> 
    <child name="foo"/> 
</root> 

和位於<child>元件上的XPathNavigator

string withNs = navigator.GetAttribute("name", navigator.NamespaceURI); 
string withoutNs = navigator.GetAttribute("name", ""); 

產生奇怪的結果:withNs是空的,包含withoutNsfoo

這是爲什麼?我原以爲這是另一回合,因爲name屬性必須位於Demo名稱空間中,如child元素。

MSDN文檔沒有提及傳遞namespaceURI=""的神奇含義,所以我假設你必須傳遞該屬性的真實名稱空間URI。

回答

5

< <由於name屬性必須位於Demo命名空間中,就像child元素一樣。 > >

根據w3c規範,屬性不會繼承它所屬的元素的名稱空間,這就是爲什麼您得到了那些結果,這是正確的。

+1

謝謝!傻我。我想在發佈之前驗證我對名稱空間繼承的假設,但是放棄了太簡明的XML規範:-(無論如何,我剛剛發現了一個很好的解釋:http://www.xmlplease.com/attributexmlns – 2009-12-18 08:47:01

相關問題