假设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>
。如何获取选择器以同时获取两者?
答案 0 :(得分:2)
您也可以使用self
实现此目的:
//h2[contains(text(),'Locator')]/(following-sibling::*|self::*)
答案 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')]