想象一下以下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.
想象一下以下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']
现在,我想引用第二个
目前已提出两种解决方案,但这两种方案都没有从您在问题中展示的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>