在同一XPath查询中结合使用前一个和后一个同级,直到第一个实例



在这里跟随post在同一个xpath查询中结合使用前一个和后一个同级,我想做同样的事情,只是我想让节点一直到p2的第一次出现

所以修改后的示例数据是

<a>
<b property="p1">zyx</b>
<b>wvu</b>
<b>tsr</b>
<b>dcv</b> 
<b property="p2">qpo</b>
<b>qcs</b>
<b property="p2">wee</b>
<b>tbg</b>
<b>rty</b>
<b property="p2">qwe</b>
<b>jkl</b>
</a>

我试过

/a/b[preceding-sibling::b/@property='p1' and following-sibling::b[1]/@property='p2']

这给了我dcv、qcs和rty。然后我尝试了

/a/b[preceding-sibling::b/@property='p1' and (following-sibling::b/@property='p2')[1]]

这给了我wvu、tsr、dcv、qpo、qcs、wee、tbg和rty。

我实际需要的是从p1到第一个p2,或者wvu、tsr和dcv。我几乎尝试过[1]的每一种组合,但都失败了,我希望在结构上得到一些帮助。

实现这一点的一种方法是使用以下XPath-1.0表达式:

/a/b[preceding-sibling::b/@property='p1' and not(preceding-sibling::b/@property='p2' or @property='p2')]

它检查给定的b元素是否具有名为p1前同级,而不是p2p2本身的前同级

相关内容

最新更新