如何使用XSLT获取唯一XML元素的值

时间:2014-03-31 19:58:58

标签: xml xslt xslt-1.0

我想要XML文档中唯一的元素列表。如果元素的出现次数大于1,我想在输出中出现最后一次:

请参阅以下XML获取唯一列表:

<Organization>
    <Fund>
      <id>001</id>
      <name>ABC Ltd</name>
    </Fund>
    <Fund>
      <id>002</id>
      <name>DEF Limited</name>
    </Fund>
    <Fund>
      <id>001</id>
      <name>ABC Ltd.</name>
    </Fund>
    <Fund>
      <id>002</id>
      <name>DEF Corporation</name>
    </Fund>
    <Fund>
      <id>003</id>
      <name>XYZ LLC.</name>
    </Fund>
 </Organization>

转换应输出以下结果:

<Organization>
    <Fund>
      <id>001</id>
      <name>ABC Ltd.</name>
    </Fund>
    <Fund>
      <id>002</id>
      <name>DEF Corporation</name>
    </Fund>
    <Fund>
      <id>003</id>
      <name>XYZ LLC.</name>
    </Fund>
 </Organization>

*请注意基金的名称标签更改为id 001和002。

需要XSLT1中的示例代码。提前致谢。

1 个答案:

答案 0 :(得分:2)

使用muenching分组:

为每个fund_by_id创建一个密钥

通过仅选择ID与密钥组中最后一个ID匹配的资金,从每个密钥复制最后一个资金。

<xsl:key name="funds_by_id" match="Fund" use="id"/>
<xsl:template match="Organization">
  <Organization>
      <xsl:copy-of select="Fund[generate-id() = 
                generate-id(key('funds_by_id',id)[last()])]"/>
  </Organization>
</xsl:template>