试图在两个h2标签之间获取所有p标签文本

时间:2013-08-10 23:27:48

标签: xpath

<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标签,然后获得先前-sibling :: p但是这会将所有p标签抓取到DOM的末尾。我试图使用“和”选择器基本上声明一个开始和结束但它返回null。我必须在这里遗漏一些东西,但我已经坚持了很长一段时间。我无法预测我需要多少个p标签,因此在这种情况下,p元素上的索引号对我没有帮助。

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

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

1 个答案:

答案 0 :(得分: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']]