xPath:选择一系列兄弟节点,直到特定的兄弟节点

时间:2017-08-14 14:11:43

标签: html xml xpath predicate siblings

我有以下 Lis

<ul>
    //1st subcategory with 4 sub categories        
    <li class="supercategory"></li>
      <li class="subcategory"></li>
      <li class="subcategory"></li>
      <li class="subcategory"></li>
      <li class="subcategory"></li>

    //2nd subcategory with 3 sub categories 
    <li class="supercategory"></li>
      <li class="subcategory"></li>
      <li class="subcategory"></li>
      <li class="subcategory"></li>

    //3d subcategory with 1 sub category
    <li class="supercategory"></li>
      <li class="subcategory"></li>
</ul>

我一直在尝试获得每个超级类别之后的所有&#34; level-2&#34; s。因此,对于第一个超类别,xpath匹配将是4个子类别兄弟 lis ,第二个超类别xpath将返回3 lis 等等。

我尝试了几件事,但简单的开头就像是:

//li[@class="supercategory"][position()=2]/following-sibling::li[@class ="subcategory"]

我试图在第二个超类别之后获得3个子类别 lis ,但显然这将返回所有带有子类别的 lis

因此,我想知道是否有一个更适合解决这个问题的谓词。特别是在这种情况下,子类别是具有超类别的兄弟节点。

为方便起见,我一直在这里测试:https://www.freeformatter.com/xpath-tester.html

提前致谢。

1 个答案:

答案 0 :(得分:0)

你是如何使用xpath的?

如果您只是遍历超类别并因此知道它们的位置并且可以动态地构建xpath,那么您可以简单地计算前面的subercategories。

//li[@class="supercategory"][position()=2]/following-sibling::li[@class ="subcategory"][count(preceding-sibling::li[@class='supercategory']) = 2]