2016-02-02 3 views
2

Предполагая, что у меня есть этот XML:Как найти каждый элемент первого потомка с помощью xpath?

<p> 
    <a> 
     <b> 
      <jedi></jedi> 
      <c> 
       <jedi></jedi> 
      </c> 
     </b> 
    </a> 
    <a> 
     <b> 
      <jedi></jedi> 
      <c> 
       <jedi></jedi> 
      </c> 
     </b> 
    </a> 
</p> 

и я хочу, чтобы выбрать каждый первый jedi внешний вид под <a> (2 результатов), независимо от структуры XML-под <a>, как мне это сделать?

Когда я попробовал один из приведенных ниже примеров, все <jedi> возвращается

  1. //a//jedi[1]
  2. //jedi[ancestor::a][1]

Когда я попытался с помощью кронштейнов, ниже, только самый первый вернулся и не каждый первый.

  1. (// A // джедай) [1]
+0

Возможный дубликат [Как выбрать указанный узел в наборов узлов XPATH по индексу с Selenium?] (http://stackoverflow.com/questions/3674569/how-to-select-specified-node-within-xpath-node-sets-by-index-with-selenium) – har07

ответ

3

Попробуйте //a/descendant::jedi[1]

Пример:

# tee <x>(java -cp Saxon-HE-9.5.1-5.jar net.sf.saxon.Query -s:- -qs:'//a/descendant::jedi[1]') 
<p> 
    <a> 
    <b> 
     <jedi>1</jedi> 
     <c> 
     <jedi>2</jedi> 
     </c> 
    </b> 
    </a> 
    <a> 
    <b> 
     <jedi>3</jedi> 
     <c> 
     <jedi>4</jedi> 
     </c> 
    </b> 
    </a> 
</p> 
# <?xml version="1.0" encoding="UTF-8"?><jedi>1</jedi><jedi>3</jedi> 
Смежные вопросы