【发布时间】:2016-01-06 16:04:23
【问题描述】:
我有以下 HTML 示例:
<!-- lots of html -->
<h2>Foo bar</h2>
<p>lorem</p>
<p>ipsum</p>
<p>etc</p>
<h2>Bar baz</h2>
<p>dum dum dum</p>
<p>poopfiddles</p>
<!-- lots more html ... -->
我希望提取“Foo bar”标题之后的所有段落,直到到达“Bar baz”标题(“Bar baz”标题的文本未知,所以很遗憾我无法使用答案布吉曼提供)。现在我当然可以使用//h2[text()='Foo bar']/following::p 之类的东西,但这当然会抓住这个标题后面的 all 段落。所以我可以选择遍历节点集并将段落推送到数组中,直到文本与下一个标题匹配,但老实说,这从来没有像在 XPath 中那样酷。
有没有我想念的方法来做到这一点?
【问题讨论】:
-
好问题,+1。请参阅我对单个 XPath 表达式的回答,该表达式选择指定节点的所有“紧跟同级”。我还提供了一个更通用的 XPath 表达式,可用于查找任何节点的“紧随其后的兄弟姐妹”。提供了广泛的解释。