如何通过使用XSLT获得唯一XML元素的值

 2021-04-26 

How to get value of unique XML element by using XSLT

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<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>

转换应输出以下结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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中的示例代码。提前致谢。


使用诱人分组:

为每个fund_by_id

创建一个密钥

通过仅选择ID匹配密钥组中最后一个ID的那些基金来复制每个密钥中的最后一个基金。

1
2
3
4
5
6
7
<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>