代码之家  ›  专栏  ›  技术社区  ›  sinDizzy

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

  •  0
  • sinDizzy  · 技术社区  · 7 年前

    Combining the use of preceding and following sibling in the same xpath query 我想做同样的事情,除了我想让节点到达

    <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]的几乎所有组合,但都失败了,希望在构造上得到一些帮助。

    1 回复  |  直到 7 年前
        1
  •  0
  •   zx485 potemkin    7 年前

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

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

    它检查给定的 b 上一个同级节点 命名 p1 而不是一个 上一个同级节点 属于 p2 p2 它本身这就是全部。