.net 为什么XPath元素继承默认名称空间,而属性不继承?

.net 为什么XPath元素继承默认名称空间,而属性不继承?,.net,xml,xpath,.net,Xml,Xpath,我有一个带有默认名称空间的XML文档。我无法像/someroot/somechild那样对其进行XPath查询,直到我发现必须将名称空间映射到前缀,比如x,并使用该前缀/x:someroot/x:somechild。在我想查询具有某些属性的元素之前,这一切都很好,在这种情况下,/x:someroot/x:somechild[@x:someattribute]不起作用,但是/x:someroot/x:somechild[@someattribute]起作用。在XML文档中没有定义名称空间前缀的情况

我有一个带有默认名称空间的XML文档。我无法像
/someroot/somechild
那样对其进行XPath查询,直到我发现必须将名称空间映射到前缀,比如
x
,并使用该前缀
/x:someroot/x:somechild
。在我想查询具有某些属性的元素之前,这一切都很好,在这种情况下,
/x:someroot/x:somechild[@x:someattribute]
不起作用,但是
/x:someroot/x:somechild[@someattribute]
起作用。在XML文档中没有定义名称空间前缀的情况下,我希望每个节点、元素、属性或其他都继承默认名称空间。相反,元素似乎继承了默认名称空间,但属性没有继承。诚然,我对XML的理解非常有限,那么我缺少什么呢


我使用.NET
XmlDocument
对象作为要查询的文档,使用
XmlNamespaceManager
对象将文档的默认名称空间映射到前缀,使用
SelectSingleNode(String,XmlNamespaceManager)
方法对文档进行查询。

这是名称空间规范对此问题的说明:

默认名称空间声明不直接应用于属性 姓名;非固定属性的解释取决于 它们出现的元素

没有给出规范作者做出此决定的理由

有人指出,这种说法实际上非常模糊。例如,它没有说非固定属性不在名称空间中,也没有说它们与包含元素位于同一名称空间中,但这两种解释都可以合理地采用。要获得明确的声明,您必须查看XPath 1.0规范,该规范明确指出:

如果 该属性没有前缀

同样,没有给出任何理由(规范通常不会给出理由,除非编辑觉得有强烈的需要证明自己)。但是XPath1.0规范的编辑是James Clark,James Clark在这里编写了一个教程

这为他对名称空间的总体思考提供了线索;但这一决定没有任何理由,他只是重申:

请注意,xmlns属性不影响unfixed属性 名字


这就是名称空间规范对这一问题的看法:

默认名称空间声明不直接应用于属性 姓名;非固定属性的解释取决于 它们出现的元素

没有给出规范作者做出此决定的理由

有人指出,这种说法实际上非常模糊。例如,它没有说非固定属性不在名称空间中,也没有说它们与包含元素位于同一名称空间中,但这两种解释都可以合理地采用。要获得明确的声明,您必须查看XPath 1.0规范,该规范明确指出:

如果 该属性没有前缀

同样,没有给出任何理由(规范通常不会给出理由,除非编辑觉得有强烈的需要证明自己)。但是XPath1.0规范的编辑是James Clark,James Clark在这里编写了一个教程

这为他对名称空间的总体思考提供了线索;但这一决定没有任何理由,他只是重申:

请注意,xmlns属性不影响unfixed属性 名字


当你问“为什么?”时,你希望得到什么样的答案?您想知道XML名称空间工作组成员在做出设计决策时给出的基本原理吗?或者,您是否需要第三方的理由来解释为什么这可能是一个合理的决定?或者你只是想要一个指向规范中规则的指针,上面写着,是的,这就是它的工作方式?是一个dup,但我得到了一个我喜欢的答案。你会推荐我做什么?当你问“为什么”时,可能会重复,你希望得到什么样的答案?您想知道XML名称空间工作组成员在做出设计决策时给出的基本原理吗?或者,您是否需要第三方的理由来解释为什么这可能是一个合理的决定?或者你只是想要一个指向规范中规则的指针,上面写着,是的,这就是它的工作方式?是一个dup,但我得到了一个我喜欢的答案。你建议我做什么?