Xpath查找特定节点后面的所有元素

时间:2016-11-30 05:56:45

标签: html xpath

我有一个特定的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>

3 个答案:

答案 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“低”的所有标记。