我正在使用XSLT2.0。我想要的输出应该有唯一的epc元素值,没有任何重复。我需要比较所有的子元素,看是否有重复的
<EPCISDocument xmlns:cbvmda="urn:epcglobal:cbv:mda"
xmlns:ns5="urn:epcglobal:epcis:xsd:1" schemaVersion="1.2"
creationDate="2020-02-21T19:14:36.974Z"
xmlns="urn:epcglobal:epcis:xsd:1">
<EPCISBody xmlns="">
<EventList>
<ObjectEvent>
<action>ADD</action>
<epcList>
<epc>100002546566</epc>
<epc>100002546567</epc>
</epcList>
</ObjectEvent>
<ObjectEvent>
<action>ADD</action>
<epcList>
<epc>100002546566</epc>
<epc>100002546567</epc>
</epcList>
</ObjectEvent>
<ObjectEvent>
<action>ADD</action>
<epcList>
<epc>100002546568</epc>
<epc>100002546569</epc>
</epcList>
</ObjectEvent>
<ObjectEvent>
<action>ADD</action>
<epcList>
<epc>100002546568</epc>
<epc>100002546570</epc>
<epc>100002546571</epc>
</epcList>
</ObjectEvent>
<ObjectEvent>
<action>ADD</action>
<epcList>
<epc>100002546571</epc>
<epc>100002546572</epc>
</epcList>
</ObjectEvent>
<ObjectEvent>
<action>ADD</action>
<epcList>
<epc>100002546573</epc>
</epcList>
</ObjectEvent>
<ObjectEvent>
<action>ADD</action>
<epcList>
<epc>100002546573</epc>
</epcList>
</ObjectEvent>
</EventList>
</EPCISBody>
</EPCISDocument>我的输出(不正确)
<?xml version = '1.0' encoding = 'UTF-8'?>
<ns6:EPCISDocument xmlns:ns6="urn:epcglobal:epcis:xsd:1">
<EPCISBody>
<EventList>
<ObjectEvent>
<epcList>
<epc>100002546566</epc>
<epc>100002546567</epc>
<action/>
</epcList>
</ObjectEvent>
<ObjectEvent>
<epcList>
<epc>100002546566</epc>
<epc>100002546567</epc>
<action/>
</epcList>
</ObjectEvent>
<ObjectEvent>
<epcList>
<epc>100002546568</epc>
<epc>100002546569</epc>
<action/>
</epcList>
</ObjectEvent>
<ObjectEvent>
<epcList>
<epc>100002546568</epc>
<epc>100002546569</epc>
<action/>
</epcList>
</ObjectEvent>
<ObjectEvent>
<epcList>
<epc>100002546568</epc>
<epc>100002546570</epc>
<epc>100002546571</epc>
<action/>
</epcList>
</ObjectEvent>
<ObjectEvent>
<epcList>
<epc>100002546568</epc>
<epc>100002546570</epc>
<epc>100002546571</epc>
<action/>
</epcList>
</ObjectEvent>
<ObjectEvent>
<epcList>
<epc>100002546571</epc>
<epc>100002546572</epc>
<action/>
</epcList>
</ObjectEvent>
<ObjectEvent>
<epcList>
<epc>100002546573</epc>
<action/>
</epcList>
</ObjectEvent>
</EventList>
</EPCISBody>
</ns6:EPCISDocument>**Desired Output:**<EPCISDocument xmlns:cbvmda="urn:epcglobal:cbv:mda"
xmlns:ns5="urn:epcglobal:epcis:xsd:1" schemaVersion="1.2"
creationDate="2020-02-21T19:14:36.974Z"
xmlns="urn:epcglobal:epcis:xsd:1">
<EPCISBody xmlns="">
<EventList>
<ObjectEvent>
<action>ADD</action>
<epcList>
<epc>100002546566</epc>
<epc>100002546567</epc>
</epcList>
</ObjectEvent>
<ObjectEvent>
<action>ADD</action>
<epcList>
<epc>100002546568</epc>
<epc>100002546569</epc>
</epcList>
</ObjectEvent>
<ObjectEvent>
<action>ADD</action>
<epcList>
<epc>100002546570</epc>
<epc>100002546571</epc>
</epcList>
</ObjectEvent>
<ObjectEvent>
<action>ADD</action>
<epcList>
<epc>100002546572</epc>
</epcList>
</ObjectEvent>
<ObjectEvent>
<action>ADD</action>
<epcList>
<epc>100002546573</epc>
</epcList>
</ObjectEvent>
</EventList>
</EPCISBody>
</EPCISDocument>**My XSLT**<xsl:template match="/">
<ns6:EPCISDocument>
<EPCISBody>
<EventList>
<xsl:for-each-group select="/ns6:EPCISDocument/EPCISBody/EventList/ObjectEvent/epcList"
composite='yes' group-by="epc">
<ObjectEvent>
<epcList>
<xsl:for-each select="epc">
<epc>
<xsl:value-of select="."/>
</epc>
</xsl:for-each>
<action>
<xsl:value-of select="action"/>
</action>
</epcList>
</ObjectEvent>
</xsl:for-each-group>
</EventList>
</EPCISBody>
</ns6:EPCISDocument>
</xsl:template>我正在使用XSLT2.0。我想要的输出应该有唯一的epc元素值,没有任何重复。我需要比较所有的子元素,看看它们是否是完全重复的。
发布于 2020-02-25 01:49:35
如果我的理解是正确的,您可以很容易地使用xsl:key (看这里的小提琴).
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="epc" match="epc" use="normalize-space()"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="
ObjectEvent[not(epcList/epc[count(.|key('epc',normalize-space())[1])=1])]|
epc[not(count(.|key('epc',normalize-space())[1])=1)]"/>
</xsl:stylesheet>但是,当遇到"ADD“以外的action时,我不确定应该发生什么。(现在,action被忽略了。)
https://stackoverflow.com/questions/60314711
复制相似问题