我有一个特定的html,如下所示,我观察到在所有情况下都会出现一个特定的h2节点。
<div id='myDiv'>
<..other elements..>
<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>
</div>
我希望html格式的特定节点之后的所有标记如下所示。
正如你所看到的,我可以通过应用xpath //div[@id='myDiv']/h2[contains(.,"Locator")]
来找到h2标签,但问题是在h2标签之后找到div内的所有元素。(我不确定在这个h2标签之后可以出现什么类型的标签)。为了更清楚,选择以下节点的xpath是什么
<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>
答案 0 :(得分:3)
*[preceding-sibling::h2]
表示h2
之后的所有元素。所以在选择器中添加contains之后就像这样
//div[@id='myDiv']/*[preceding-sibling::h2[contains(text(),'Locator')]]
见Demo Here。单击“测试”按钮,您将获得结果
答案 1 :(得分:1)
您似乎正在寻找following-sibling
轴:
//div[@id='myDiv']/h2[contains(.,"Locator")]/following-sibling::*
但请注意,以下兄弟姐妹确实是路径中上一步所选节点的兄弟姐妹。在您的示例中,这正是您要选择的所有元素(相对于h2
节点),但如果这些节点中的任何节点具有子元素,那么这些子元素将不会是{{1 },并且不会被选中。
如果你想要所有这些子元素及其子女等,那么你也可以使用h2
轴:
descendant-or-self
答案 2 :(得分:0)
我会将//h2[contains(text(),"Locator")]/following-sibling::*
用于嵌套在与h2相同的父级下但是比h2“低”的所有标记。