Подсчет специального текста детей в xpath

У меня есть этот xml-документ:

    <AAA> 
      <CCC> 
           <BBB>SALAM</BBB>
           <BBB>HALET KHUBE</BBB> 
           <BBB>HEY</BBB> 
           <TTT>SALAM</TTT>
           <GGG/>
           <ZZZ/>
      </CCC> 
      <DDD> 
           <BBB>GOOD</BBB> 
           <BBB>BOOO</BBB> 
           <GGG/>
           <GGG/>
           <ZZZ/>
      </DDD> 
      <EEE> 
           <CCC>TAKE</CCC> 
           <DDD>LEAVE</DDD>
           <ZZZ/>
           <ZZZ/>
           <ZZZ/> 
      </EEE> 
 </AAA>

Я хочу выбрать узлы, у которых есть 2 дочерних элемента с текстом = "SALAM" (у этого узла может быть любое количество дочерних элементов, но он должен иметь 2 дочерних элемента с текстом = "SALAM"). Например, в приведенном выше xml запрос xpath должен возвращать CCC ярлык. пожалуйста, помогите мне. спасибо


person ainternet73    schedule 07.01.2012    source источник


Ответы (2)


Использование:

/*/*[count(*[text() = 'SALAM']) = 2 ]

Может быть эффективнее использовать следующее:

/*/*
  [*[text() = 'SALAM'][2]
 and
   not([*[text() = 'SALAM'][3])
  ]

Всегда, когда это возможно, старайтесь избегать использования псевдооператора //, поскольку во многих случаях он может быть очень медленным.

person Dimitre Novatchev    schedule 07.01.2012

Используйте функцию xpath count():

//*[count(./*[text()="SALAM"])=2]
person choroba    schedule 07.01.2012