ThomasM: xsl for-each loop auf letzten durchlauf zugreifen

Beitrag lesen

Hallo Günter,

Das eigentlich Problem ergibt sich erst jetzt. Im Zieldokument sollen gleiche nachnamen nur einmal aussgeben werden.

Dazu sind Gruppierungstechniken geeignet, im Folgenden für XSLT 1.0 bzw. 2.0 demonstriert:

<?xml version="1.0" encoding="UTF-8"?>  
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
  <xsl:key name="groupby" match="//name" use="nachname"/>  
  <xsl:template match="root">  
    <html><head><title>Test</title></head><body>  
      <xsl:for-each select="//name[generate-id() = generate-id(key('groupby',nachname)[1])]">  
        <p>  
          <strong><xsl:value-of select="nachname"/></strong>  
          <xsl:text>: </xsl:text>  
          <xsl:for-each select="key('groupby',nachname)">  
            <xsl:value-of select="vorname"/>  
            <xsl:if test="position()!=last()">  
              <xsl:text>, </xsl:text>  
            </xsl:if>  
          </xsl:for-each>  
        </p>  
      </xsl:for-each>  
    </body></html>  
  </xsl:template>  
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>  
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
  <xsl:template match="root">  
    <html><head><title>Test</title></head><body>  
      <xsl:for-each-group select="//name" group-by="nachname">  
        <p>  
          <strong><xsl:value-of select="nachname"/></strong>  
          <xsl:text>: </xsl:text>  
          <xsl:for-each select="current-group()">  
            <xsl:value-of select="vorname"/>  
            <xsl:if test="position()!=last()">  
              <xsl:text>, </xsl:text>  
            </xsl:if>  
          </xsl:for-each>  
        </p>  
      </xsl:for-each-group>  
    </body></html>  
  </xsl:template>  
</xsl:stylesheet>

Grüße,
Thomas