Xpath以选择所有后续兄弟以及匹配的元素

时间:2019-01-18 14:44:52

标签: xpath

假设HTML类似于:

<h3>Ignore h3</h3>
<p>Ignore p</p>
<h2>Locator</h2>
<h3>Header 1</h3>
<p>Paragraph 1.1</p>
<h3>Header 2</h3>
<p>Paragraph 2.1</p>
<p>Paragraph 2.2.</p>
<p>Paragraph 2.3.</p>
<h4>test header 4</h4>

我想要的是找到其中带有文本"Locator"的h2及其后的兄弟姐妹。我已经达到以下条件:

//h2[contains(text(),'Locator')]/following-sibling::*

它确实正确地获得了兄弟姐妹,但它本身未返回<h2>Locator</h2>。如何获取选择器以同时获取两者?

2 个答案:

答案 0 :(得分:2)

您也可以使用self实现此目的:

//h2[contains(text(),'Locator')]/(following-sibling::*|self::*)

查看链接:http://xpather.com/ri9VYf0n

答案 1 :(得分:0)

您可以尝试从前一个兄弟姐妹开始:

//h2[contains(text(),'Locator')]/preceding-sibling::*[1]/following-sibling::*

但是如果目标h2节点是第一个孩子(之前没有兄弟姐妹),这将无法工作

因此最好使用:

//*[preceding-sibling::h2[.="Locator"]] | //h2[.="Locator"]

选择“ Locator”标头和标头本身的所有后续同级。

或与您的初始XPath相同

//h2[contains(text(),'Locator')]/following-sibling::* | //h2[contains(text(),'Locator')]