파티 블록 내에서 중복을 제거해야하는 샘플 메시지가 있습니다. 당신이 temperatureCode 저장 및 보관 1과 중복 제거 볼 수 있듯이노드 내에서 중복을 제거하고 XSLT에서 전체 XML 구조 복사
샘플 메시지가
<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>
예상 출력은
<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>
입니다.
아래의 XSLT를 사용하고 있습니다. 그것은 파티의 첫 번째 노드에서만 중복을 제거하지만 두 번째 노드는 완전히 처리하지 않습니다. 내가 사용 XSLT는
<?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>
내가 코드를 적응 XSLT
XSLT 1.0 또는 2.0 중 하나를 선택하십시오 - 둘 다 선택하십시오. –