我正在阅读 XPath 的标准并试图了解它的一部分是如何工作的。
xpath 标准似乎没有指出评估后代或自我的顺序(首先是上下文节点,或者首先是后代)。在 RFC 的一个阶段,它说它返回所有后代和上下文(如果存在)。在另一个阶段它说相反 - 它返回上下文节点和所有后代。
我的问题是:这个 XPath 的行为是什么:
/a//c
从逻辑的角度来看,这应该是进行深度优先搜索。因此,对于以下 XML:
<a>
<b>
<c v="1"/>
</b>
<c v="2"/>
</a>
这里的逻辑(以及似乎是实际的)行为似乎是结果将是:
c (v="1")
c (v="2")
但是,根据 RFC,//c 等效于:
/descendant-or-self::node()/child::c
这意味着,如果我做对了,那么行为可能会有所不同,具体取决于后代或自我的评估方式。
如果首先返回上下文节点,那么结果看起来应该是:
c(v="2")
c(v="1")
由于第一个节点在应用到时返回“//”a
是 self(即a
)。然后child::c
被评估,我认为它会返回,因为那是c(v="2")
它的第一个孩子......a
c
有人可以指出解释为什么c(v="1")
应该首先返回的 RFC 部分吗?