首页 > 解决方案 > 如何通过 XPath 选择每个元素中的第一个匹配项?

问题描述

在以下 html 标记中:

<div>
  <div>
    <h3>
      <a href='http://Ali.org'></a>
    </h3>
    <div>
      <p>
        <a href='http://Mohammad.org'></a>
      </p>
    </div>  
 </div>    
 <div>
  <h4>
    <a href='http://Ali.org'></a>
  </h4>
  <p>
    <a href='http://Mohammad.org'></a>
  </p>
 </div>
</div>

我想选择两个' a '标签' http://Ali.org '和' http://YaALi.org '。通过以下方式,我可以:

//div//a[not(parent::*[not(following-sibling::*)])]

但是更简单的 XPath 呢?通过以下方式,将选择所有' a '标签,因为它们都是父母的第一个孩子:

//div/div//a[1]

或者通过以下方式,只会选择第一个“ a ”标签:

(//div//a)[1]

我想选择 div 元素的“a”标签中的第一个“a”标签...

标签: xpathparent-child

解决方案


//in the middle of a path 是 的缩写descendant-or-self::node(),所以如果你这样做

//div/div//a[1]

这实际上意味着

//div/div/descendant-or-self::node()/a[1]

a这会选择所有后代节点的第一个子节点。你想要的是:

//div/div/descendant::a[1]

这将选择第一个后代a


推荐阅读