ThomasM: XSLT-Gruppierung (keine Duplikate)

Beitrag lesen

Hallo juls_pro_37,

Korrekt wäre jedoch:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
...
      <HeaderText>
        <Qualifier>AAI</Qualifier>
        <Text>AAI10854</Text>
      </HeaderText>
      <HeaderText>
        <Qualifier>DEL</Qualifier>
        <Text>DEL0854</Text>
      </HeaderText>     
      ...
      <LineItem>
        <Lines>
          ...
          <LineText>
            <Qualifier>AAA</Qualifier>
            <Text>AAA1-0927</Text>
          </LineText>
          <LineText>
            <Qualifier>LIN</Qualifier>
            <Text>LIN1-0927</Text>
          </LineText>         
        </Lines>
      </LineItem>
      ...

Kann man das mittels XSLT lösen?

Vom unvollständigen XML-Dokument ausgehend – root als Wurzelelement gewählt – kommt man so zur gezeigten Ausgabe mittels Gruppierung unter XSLT 2.0:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

  <xsl:template match="root">
    <out>
      <xsl:for-each-group select="HeaderText" group-by="Qualifier">
        <xsl:for-each select="current-group()">
          <xsl:if test="position() = 1">
            <xsl:copy-of select="."/>
          </xsl:if>
        </xsl:for-each>
      </xsl:for-each-group>

      <LineItem>
        <Lines>
          <xsl:for-each-group select="LineItem/Lines/LineText" group-by="Qualifier">
            <xsl:for-each select="current-group()">
              <xsl:if test="position() = 1">
                <xsl:copy-of select="."/>
              </xsl:if>
            </xsl:for-each>
          </xsl:for-each-group>
        </Lines>
      </LineItem>
    </out>

  </xsl:template>

</xsl:stylesheet>

Grüße,
Thomas