Как выбрать первое вхождение в каждом элементе по XPath? - PullRequest
0 голосов
/ 13 мая 2018

В следующих 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]

Я хочу выбрать теги 'a', которые являются первыми в тегах 'a' элементов div ...

1 Ответ

0 голосов
/ 13 мая 2018

// в середине пути - сокращение для descendant-or-self::node(), поэтому, если вы сделаете

//div/div//a[1]

, это фактически означает

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

Это выбирает первого потомка a из всех узлов-потомков.То, что вы хотите:

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

, который выберет первого потомка a.

...