2
<h2><span>Title1</span></h2>
<p>text I want</p>
<p>text I want</p>
<p>text I want</p>
<p>text I want</p>
<h2>Second Title I want to stop collecting p tags after</h2>

我可以通过识别 h2 中的文本来获取 p 标签,然后获取 preceeding-sibling::p 但这会将所有 p 标签抓取到 DOM 的末尾。我试图使用“and”选择器来实质上声明一个开始和结束,但它返回 null。我一定在这里遗漏了一些东西,但我已经坚持了很长一段时间。我无法预测我需要多少个 p 标签,所以在这种情况下 p 元素上的索引号对我没有帮助。

这是我用来在 h2 之后获取以下所有 p 标签的 xpath。问题是它将所有 p 标签抓取到 DOM 的末尾。

//span[contains(text(), "Title1")]/ancestor::h2/following-sibling::p
4

1 回答 1

10

因此,您只想获取p位于两个特定标签之间的所有h2标签。xpath 查询与听起来完全一样。

//p[
   preceding-sibling::h2[span='Title1'] and
   following-sibling::h2[.='Second Title I want to stop collecting p tags after']
]

可以通过选择p第一个前面h2元素是起始元素的所有元素来简化查询。换句话说,h2当前p和标头之间没有其他先前的兄弟姐妹。

//p[preceding-sibling::h2[1][span='Title1']]
于 2013-08-11T00:53:21.120 回答