我有一个XML,我需要忽略重复项。在我给出的例子中,如果FaciltyId是重复的,那么我忽略了所有匹配的记录。应仅为STORE-2和STORE-3生成输出。我有以下示例,但它最后一次出现了我不想要的重复节点。有人可以指导我吗?谢谢。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="x" match="FacilityId" use="."/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Item">
<xsl:for-each select=".">
<xsl:if test="generate-id(FacilityId) = generate-id(key('x', FacilityId)[1])">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<Items>
<MessageHeader>
<Version>1.0</Version>
</MessageHeader>
<Item>
<FacilityId>STORE-1</FacilityId>
<ItemId>1001</ItemId>
<ItemsType>FS</ItemsType>
<InventoryDateTime>2016-07-05T07:00:05-07:00</InventoryDateTime>
</Item>
<Item>
<FacilityId>STORE-1</FacilityId>
<ItemId>1002</ItemId>
<ItemsType>FS</ItemsType>
<InventoryDateTime>2016-07-05T07:00:05-07:00</InventoryDateTime>
</Item>
<Item>
<FacilityId>STORE-2</FacilityId>
<ItemId>1003</ItemId>
<ItemsType>FS</ItemsType>
<InventoryDateTime>2016-07-05T07:00:05-07:00</InventoryDateTime>
</Item>
<Item>
<FacilityId>STORE-3</FacilityId>
<ItemId>1004</ItemId>
<ItemsType>FS</ItemsType>
<InventoryDateTime>2016-07-05T07:00:05-07:00</InventoryDateTime>
</Item>
</Items>