sorosch: Gliederung erstellen

Beitrag lesen

Hallo

ich habe das erst mal mit einer XML-Datei probiert, die so aussieht:

<autoren>
<autor>Helfa</autor>
<autor>Berta</autor>
<autor>Zappa</autor>
<autor>PinkFloyd</autor>
<autor>Affengeil</autor>
<autor>Police</autor>
<autor>Polizei</autor>
<autor>Hügel</autor>
<autor>Pizza</autor>
<autor>Bieber</autor>
<autor>Aberhallo</autor>
</autoren>

Dazu gefunden habe ich eine XSL, die aber fehlerhaft ist:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1"             doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"             doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"             media-type="text/xml"/>
<!-- Register nach Anfangsbuchstaben --> <xsl:template match="/">
<html xml:lang="de" xmlns="http://www.w3.org/1999/xhtml">

xsl:apply-templates/
</html>
</xsl:template>
<xsl:template match="autoren">
<head>
<title>Autorenliste</title>
</head>
<body>

<xsl:for-each select="autor">
<xsl:sort select="."/>
<xsl:call-template name="liste"/>
</xsl:for-each>
</body>

</xsl:template>
<xsl:template name="liste">
<xsl:variable name="buchstabe">
<xsl:value-of select="substring(.,1,1)"/>
</xsl:variable>

<br/>
Wort: <xsl:value-of select="."/>
Buchstabe: <xsl:value-of select="$buchstabe"/>
<br/>

<xsl:if test="$buchstabe != substring(preceding-sibling::autor[1],1,1)">

neu
<xsl:value-of select="$buchstabe"/>
<br/>
cc
<xsl:value-of select="."/>
  </xsl:if>

</xsl:template>
</xsl:stylesheet>

die macht leider so eine Ausgabe:

A
Aberhallo
A
Aberhallo
Affengeil
B
Berta
Bieber
B
Bieber
H
Helfa
Hügel
...

Es kommen Buchstaben mehrmals vor. Aber immerhin...

Vielen Dank
cu
George