【问题标题】:Xpath how to get all following-sibling until next specific tag comesXpath如何获取所有后续兄弟,直到下一个特定标签出现
【发布时间】:2021-06-02 13:12:54
【问题描述】:

我有一个需要收集的 xpath 问题。

我想收集所有后续兄弟姐妹,直到下一个强标签。

要收集这些数据,假设有两个变量,如下所示。

  • 强:“关键”参数

  • 强标签之间:“值”参数

<strong>A</strong>
<p>a</p>
<strong>B</strong>
<p>b</p>
<strong>C</strong>
<p>c</p>
<strong>D</strong>
<ul>
  <li>
    · d1
    <em>d2</em>
  </li>
</ul>
<strong>E</strong>
<p>e</p>

我想要的结果是

  • 键:A,值:a
  • 键:B,值:b
  • 键:C,值:c
  • 键:D,值:d1 d2
  • 键:E,值:e

在代码中,E后面没有strong。

请帮我找出解决办法。 :(

【问题讨论】:

标签: html xpath


【解决方案1】:

如果您使用的是 XPath 1.0,这种问题会非常棘手(事实上,对于以后的版本也不是小事)。在许多情况下,最实用的解决方案是让您的 XPath 过度检索,然后在接收应用程序中过滤结果。

在您的特定示例中,请求“直到下一个 strong 的所有以下同级元素”与请求“紧随其后的同级元素”相同,可以通过 following-sibling::*[1] 获得。

但在更一般的情况下,您需要类似的东西

following-sibling::* except following-sibling::strong/(. | following-sibling::*)

这在 XPath 2.0 中有效,但在 XPath 1.0 中没有 except 运算符(此外,您不能在 1.0 中使用这样的括号)

您可以在 1.0 中使用重写来制作 except 运算符

A except B ==> A[count(.|B)=0]

但它变得相当可怕。

如果可以,请移至 XPath 3.1!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多