xPath: select 一系列兄弟节点,直到一个特定的兄弟节点

xPath: select a range of sibling nodes until a specific sibling node

我有以下 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>

我一直在尝试获取每个超级类别之后的所有 "level-2"。因此,对于第一个超类别,xpath 匹配将是 4 个子类别兄弟 lis,第二个超类别 xpath 将 return 3 lis 和等等。

我已经尝试了几种方法,但最简单的开始是这样的:

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

我正在尝试在第 2 个超类别之后获取第 3 个子类别 lis 但显然这将 return 所有 lis 与类 子类别。

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

为方便起见,我一直在此处进行测试:https://www.freeformatter.com/xpath-tester.html

提前致谢。

你是如何使用 xpath 的?

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

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