我有一个XML,需要忽略这些副本。在我给定的示例中,如果FaciltyId是重复的,那么我就忽略了所有匹配的记录。应该只为存储-2和存储-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>发布于 2016-07-18 22:49:37
如果FaciltyId是重复的,那么我就忽略了所有匹配的记录。应该只为存储-2和存储-3生成输出。
如果我正确理解了这一点,你想做的是:
XSLT1.0
<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="item-by-facility" match="Item" use="FacilityId" />
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/Items">
<xsl:copy>
<xsl:apply-templates select="Item[count(key('item-by-facility', FacilityId)) = 1]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>https://stackoverflow.com/questions/38446201
复制相似问题