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

如何将第二个/更多文本节点与XPath匹配

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

    <div>
      foo
      <span>bar</span>
      baz
    </div>
    <div>bazinga</div>
    

    我可以使用XPath表达式 //div[normalize-space(text())='foo'] 匹配 <div> 节点。

    foo 但我知道 baz -有没有办法通过第二个/第三个文本节点来匹配该节点?

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

    可以索引要匹配的节点:

    //div[normalize-space(text()[2])='baz']
    

    上面的表达式与第二个匹配 text() 儿童 div 元素。

    另一种(更具体的)变体是:

    //div[normalize-space(text()[1]) = 'baz' or text()/normalize-space(following-sibling::text()) = 'baz']
    

    文本() baz . 但这只适用于XPath-2.0,所以我之前没有提到过。

    在这三种情况下,您的示例的结果是:

    <?xml version="1.0"?>    
    foo
    bar
    baz