擅长:python、mysql、java
<p>XPath 1.0有一个节点集的概念,其中每个<code>/</code>步骤根据节点标识消除重复项,因此您使用的单个XPath表达式不会给出两次包含同一节点的集,任何重复项都会被消除</p>
<p>在XPath2.0中,当然<code>/</code>步骤操作符仍然具有相同的重复消除语义,但有一个更通用的序列概念,它使用<code>for .. return</code>(<code>for $p in //X/Z/T[R1='ABC3']/parent::* return $p/preceding-sibling::*</code>)或XPath3.1<code>!</code>(<code>//X/Z/T[R1='ABC3']/parent::*!preceding-sibling::*</code>)允许包含重复项,请参见<a href="https://xqueryfiddle.liberty-development.net/eiZQFoV" rel="nofollow noreferrer">https://xqueryfiddle.liberty-development.net/eiZQFoV</a></p>
<p>在XPath1.0中,您需要在宿主语言(例如Python)的循环中使用多个XPath求值,或者在Python中,您可以使用列表理解<code>element_list = [el for parent in tree.xpath("//X/Z/T[R1='ABC3']/parent::*") for el in parent.xpath("preceding-sibling::*")]
</code></p>