Ich habe eine Beispielnachricht, in der ich doppelte innerhalb des Parteiblocks entfernen muss.Entfernen Sie doppelte innerhalb Knoten und kopieren Sie komplette XML-Struktur in XSLT
Die Probe Nachricht ist
<document>
<body>
<party>
<pos>
<attrGroupMany name="temperatureInformation">
<row>
<gtin>1000909090</gtin>
<attr name="temperatureCode">STORAGE</attr>
<attrQualMany name="temperature">
<value qual="FAH">10</value>
<value qual="CC">20</value>
</attrQualMany>
</row>
<row>
<attr name="temperatureCode">STORAGE</attr>
<attrQualMany name="temperature">
<value qual="FAH">10</value>
<value qual="CC">20</value>
</attrQualMany>
</row>
<row>
<attr name="temperatureCode">HANDLING</attr>
<attrQualMany name="temperature">
<value qual="FAH">10</value>
</attrQualMany>
</row>
<row>
<attr name="temperatureCode">HANDLING</attr>
</row>
</attrGroupMany>
</pos>
</party>
<party>
<pos>
<attrGroupMany name="temperatureInformation">
<row>
<gtin>1000909091</gtin>
<attr name="temperatureCode">STORAGE1</attr>
<attrQualMany name="temperature">
<value qual="FAH">10</value>
<value qual="CC">20</value>
</attrQualMany>
</row>
<row>
<attr name="temperatureCode">STORAGE1</attr>
<attrQualMany name="temperature">
<value qual="FAH">10</value>
<value qual="CC">20</value>
</attrQualMany>
</row>
<row>
<attr name="temperatureCode">HANDLING</attr>
<attrQualMany name="temperature">
<value qual="FAH">10</value>
</attrQualMany>
</row>
<row>
<attr name="temperatureCode">HANDLING</attr>
</row>
</attrGroupMany>
</pos>
</party>
</body>
</document>
Die erwartete Ausgabe ist
<document>
<body>
<party>
<pos>
<attrGroupMany name="temperatureInformation">
<row>
<gtin>1000909090</gtin>
<attr name="temperatureCode">STORAGE</attr>
<attrQualMany name="temperature">
<value qual="FAH">10</value>
<value qual="CC">20</value>
</attrQualMany>
</row>
<row>
<attr name="temperatureCode">HANDLING</attr>
<attrQualMany name="temperature">
<value qual="FAH">10</value>
</attrQualMany>
</row>
<row>
<attr name="temperatureCode">HANDLING</attr>
</row>
</attrGroupMany>
</pos>
</party>
<party>
<pos>
<attrGroupMany name="temperatureInformation">
<row>
<gtin>1000909091</gtin>
<attr name="temperatureCode">STORAGE1</attr>
<attrQualMany name="temperature">
<value qual="FAH">10</value>
<value qual="CC">20</value>
</attrQualMany>
</row>
<row>
<attr name="temperatureCode">HANDLING</attr>
<attrQualMany name="temperature">
<value qual="FAH">10</value>
</attrQualMany>
</row>
<row>
<attr name="temperatureCode">HANDLING</attr>
</row>
</attrGroupMany>
</pos>
</party>
</body>
</document>
Wie Sie das Duplikat mit temperatureCode STORAGE und storage1 sehen können entfernt werden.
Ich benutze die unten XSLT. Es entfernt nur das Duplikat vom ersten Knoten der Partei, verarbeitet den zweiten Knoten jedoch nicht vollständig. Die XSLT, die ich verwende ist
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="/document/body">
<xsl:element name="body">
<xsl:for-each select="party">
<xsl:element name="party">
<xsl:for-each select="pos">
<xsl:element name="pos">
<xsl:if test="attrGroupMany[@name = 'temperatureInformation']">
<xsl:apply-templates select="attrGroupMany[@name = 'temperatureInformation']/row[generate-id() = generate-id(key('group', concat(attr[@name = 'temperatureCode'], '|', attrQualMany[@name = 'temperature'])))]"/>
</xsl:if>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:key name="group" match="attrGroupMany[@name = 'temperatureInformation']/row"
use="concat(attr[@name = 'temperatureCode'], '|', attrQualMany[@name = 'temperature'])"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Bitte lassen Sie mich wissen, wo ich in XSLT
Bitte wählen Sie entweder XSLT 1.0 oder 2.0 - nicht beides. –