想象一下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。
答案 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>