ThomasM: XSLT 1.0 Duplikate entfernen

Beitrag lesen

Hallo juls_pro_37,

ich ahne schon, dass hier wieder nicht alles dabei steht, was passieren soll und im Grunde fische ich auch im Trüben. Folgender Ansatz erzeugt <TEXT_LINE>yes</TEXT_LINE> dort, wo das erste nicht leere TEXT_LINE-Element auftaucht und ignoriert weitere bzw. leere Vorkommen.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">

  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="TEXT_LINE[. != ''][count(preceding::TEXT_LINE[. != '']) = 0]">
    <TEXT_LINE>yes</TEXT_LINE>
  </xsl:template>

  <xsl:template match="TEXT_LINE[. != ''][count(preceding::TEXT_LINE[. != '']) > 0]"/>

  <xsl:template match="TEXT_LINE[. = '']"/>

</xsl:stylesheet>

Erhalte mit dem gezeigten XML-Dokument dieses Ergebnis:

<?xml version="1.0" encoding="UTF-8"?>
<SEEDELFOR>
   <CNT>
      <GRP>
         <REF_ON>12345</REF_ON>
         <TXT_001>
            <QUALIFIER>ZZZ</QUALIFIER>
            <TEXT_LINE>yes</TEXT_LINE>
         </TXT_001>
         <TXT_001>
            <QUALIFIER>PUR</QUALIFIER>
         </TXT_001>
         <ITEM>
            <ITEM_NUMBER_EN>1234556789123</ITEM_NUMBER_EN>
         </ITEM>
      </GRP>
   </CNT>
</SEEDELFOR>

Grüße,
Thomas