在xpath中计算子项的特殊文本

时间:2012-01-07 17:39:41

标签: xml xpath xpath-2.0

我有这个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个子项的节点,其中text =“SALAM”(该节点可以有任意数量的子节点,但它必须有2个带有text =“SALAM”的子节点。)例如在上面的xml中,xpath查询必须返回CCC标签。 请帮我。 感谢

2 个答案:

答案 0 :(得分:1)

使用count() xpath函数:

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

答案 1 :(得分:1)

使用

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

使用以下

可能更有效
/*/*
  [*[text() = 'SALAM'][2]
 and
   not([*[text() = 'SALAM'][3])
  ]

尽可能尝试避免使用//伪操作符,因为在很多情况下它可能会非常慢。