如何在XPATH中选择具有相同属性ID的第二个元素?

时间:2015-08-31 11:53:56

标签: html xml xpath

想象一下HTML片段如下:

<div>
    <div class="content">test1</div>
</div>
<div>
    <div class="content">test2</div>
</div>
<div>
    <div class="content">test3</div>
</div>

我使用的xpath是//div[@class='content']

现在,我想引用第二个div元素。我应该在xpath中添加什么? TIA。

1 个答案:

答案 0 :(得分:7)

到目前为止,已经提出了两种解决方案,但它们都没有从您在问题中显示的HTML代码段中选择任何内容。简单地将它包装在根元素中时:

<root>
 <div>
    <div class="content">test1</div>
 </div>
 <div>
    <div class="content">test2</div>
 </div>
 <div>
    <div class="content">test3</div>
 </div>
</root>

//div[@class='content'][2]//div[2][@class='content']都不会从该文档中选择任何内容。它们都假设第二个谓词([]之间)应用于中间结果序列,但第二个谓词也应用于初始文档树的节点。要选择“中间”结果的子集,请在第一部分周围使用括号:

(//div[@class='content'])[2]

,单个结果将是

<div class="content">test2</div>

更多详情

//div[@class='content'][2]表示:

  

从文档中的任何位置选择名为div的所有元素,但仅选择具有class属性且值等于“content”的元素。在那些选定的节点中,只保留那些是其父节点的第二个div[@class = 'content']元素。

因此,此表达式只会从以下文档中选择结果:

<root>
 <div>
    <div class="content">test1</div>
 </div>
 <div>
    <div class="content">test2</div>
    <div class="other">other</div>
    <div class="content">MATCH</div>
 </div>
 <div>
    <div class="content">test3</div>
 </div>
</root>

//div[2][@class='content']表示:

  

从文档中的任何位置选择名为div的所有元素,但仅选择其父级的第二个子元素。在那些选定的节点中,只保留那些具有class属性且其值等于“content”的节点。

仅在给出类似

的文档的情况下生成匹配项
<root>
 <div>
    <div class="content">test1</div>
 </div>
 <div>
    <div class="other">other</div>
    <div class="content">MATCH</div>
 </div>
 <div>
    <div class="content">test3</div>
 </div>
</root>