XPATH 1.0基于两个元素/键找到重复

时间:2014-12-22 23:35:20

标签: xml xpath

这是我的XML

<?xml version = '1.0' encoding = 'UTF-8'?>
<cmps>
      <cmp>
         <name>abc</name>
         <id>302</id>
      </cmp>
      <cmp>
         <name>abc</name>
         <id>370</id>
      </cmp>
      <cmp>
         <name>abc</name>
         <id>073</id>
      </cmp>
      <cmp>
         <name>abc</name>
         <id>302</id>
      </cmp>
      <cmp>
         <name>ab</name>
         <id>370</id>
      </cmp>

</cmps>  

=================== 在上面的xml中,想要找出基于name和id元素的所有重复项。 所以这个xml有一个重复的元素,它具有相同的名称和id。但是在xpath表达式下方显示了两个重复的元素,有人可以更正表达式......任何帮助都表示赞赏

cmps // cmp [id =(following-sibling :: cmp / id)and name =(following-sibling :: cmp / name)]

以上xpath表达式的输出:

<cmp>
         <name>abc</name>
         <id>302</id>
</cmp>
<cmp>
         <name>abc</name>
         <id>370</id>
</cmp>

预期产出:

<cmp>
             <name>abc</name>
             <id>302</id>
</cmp>

2 个答案:

答案 0 :(得分:1)

您可以使用not()

//cmps//cmp[not(id= (following-sibling::cmp/id) 
                and name = (following-sibling::cmp/name))]

结果:

<cmp>
  <name>abc</name>
  <id>302</id>
</cmp>
<cmp>
  <name>abc</name>
  <id>073</id>
</cmp>
<cmp>
  <name>ab</name>
  <id>370</id>
</cmp>

答案 1 :(得分:0)

看来,我们无法在xpath 1.0

中完成此任务