我有一个默认名称空间的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,但我得到了我喜欢的答案。你会推荐我做什么? –