XPath按计数查找节点

时间:2017-10-19 08:32:31

标签: xpath

找到每个div的h1s,其中包含三个列表元素。 (source

<div>
    <div class="fast">
      <h1>Fast</h1>
      <ul>
        <li>Cars</li>
        <li>New Horizon</li>
        <li>Chinese Food</li>
      </ul>
    </div>

    <div class="expensive">
      <h1>Expensive</h1>
      <ul>
        <li>Cars</li>
        <li>New Horizon</li>
        <li>Apple Watches</li>
      </ul>
    </div>

    <div class="nasa">
      <h1>NASA-Owned</h1>
      <ul>
        <li>Lunar Module</li>
        <li>New Horizon</li>
      </ul>
    </div>
  </div>

这对我有用,(但我希望找到更简单的语法)

//ul/li[count(../li)=3]/../../h1

4 个答案:

答案 0 :(得分:2)

不能缩短/简单=)

//div[ul[count(li)=3]]/h1

PS。好的,这是最终的:

//*[ul[count(li)=3]]/h1

答案 1 :(得分:2)

我会写

//div[count(.//li)=3]/h1

但要小心:你要求“每个包含三个列表元素的div”,这会给你;接受的答案为您提供“每个元素至少包含一个未编号的列表,其中包含三个列表项”,这不是一回事,尽管它可能会在此特定测试文档中给出相同的结果。

答案 2 :(得分:1)

尝试实施following-sibling axis语法,如下所示:

//h1[following-sibling::ul[count(li)=3]]

答案 3 :(得分:1)

匹配div下的确切h1:

//div/h1[following-sibling::ul[count(li)=3]]