Подсчет специального текста детей в xpath - PullRequest
2 голосов
/ 07 января 2012

У меня есть этот 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.Помогите мне, пожалуйста.спасибо

Ответы [ 2 ]

1 голос
/ 07 января 2012

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

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

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

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

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

1 голос
/ 07 января 2012

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

//*[count(./*[text()="SALAM"])=2]
...