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

5

想象一下以下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']

现在,我想引用第二个

元素。 我应该在我的xpath中添加什么? TIA.


//div[@class='content'][2] - splash58
1个回答

20

目前已提出两种解决方案,但这两种方案都没有从您在问题中展示的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的元素,但仅选取其父元素的第二个子元素。在这些选定的节点中,只保留具有值等于“content”的class属性的节点。

仅在类似以下文档中产生匹配:

<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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接