【问题标题】:xPath: select a range of sibling nodes until a specific sibling nodexPath:选择一系列兄弟节点,直到特定的兄弟节点
【发布时间】:2017-08-14 14:11:42
【问题描述】:

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

我一直在尝试获取每个超级类别之后的所有“2 级”。因此,对于第一个超类别,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

提前致谢。

【问题讨论】:

    标签: html xml xpath predicate siblings


    【解决方案1】:

    你是如何使用 xpath 的?

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

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

    【讨论】:

    • 抱歉,我忘记指定 xpath 规则是为了获取第二个超类别的子类别。这似乎也适用于其他子类别。
    • 好吧,如果您只想获取第二个超类别的子类别,这正是您应该使用的 xpath。
    • 通过一些小的修改,它可以适应其他超类别。所以谢谢它的工作原理。
    猜你喜欢
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多