我有一個默認名稱空間的XML文檔。直到我發現我不得不將名稱空間映射到前綴(例如x
),並使用該前綴/x:someroot/x:somechild
之前,我無法像XPath那樣在其上查詢/someroot/somechild
。這一切都很好,直到我想查詢具有某個屬性的元素,在這種情況下/x:someroot/x:somechild[@x:someattribute]
不起作用,但是/x:someroot/x:somechild[@someattribute]
的確如此。沒有在XML文檔中定義的名稱空間前綴,我希望每個節點,元素,屬性或其他名稱都繼承默認名稱空間。看來,元素已經繼承了默認的命名空間,但屬性沒有。當然,我對XML的理解是非常有限的,所以我錯過了什麼?爲什麼XPath元素繼承默認名稱空間,但屬性不會?
我使用的是.NET XmlDocument
對象作爲我的文檔來查詢,一個XmlNamespaceManager
對象到文檔的默認名稱空間映射到一個前綴,而SelectSingleNode(String, XmlNamespaceManager)
方法對文檔進行查詢。
的可能的複製[XML默認命名爲不合格的屬性名稱?](http://stackoverflow.com/questions/3312390/xml-default-namespaces-for-unqualified-attribute-names) –
當你問「爲什麼?「,你期待什麼樣的答案?你想知道XML名稱空間工作組成員在做出設計決定時給出的基本原理嗎?或者你想要某種第三方的理由,爲什麼這可能是一個合理的決定?或者你只是想要一個指向規範中規則的指針,是的,這是它的工作方式? –
是一個dup,但我得到了我喜歡的答案。你會推薦我做什麼? –