verenice: XSLT / Schleife und choose

Beitrag lesen

Hallo,
ich möchte gern die Nummerierung der Überschriften bei meinem XML-File selbst steuern, daher, ich benutze nicht die praktische number()- Funktion.

Ich habe einen Parameter, der die Hauptkapitel durchnummieren soll.
Das funktioniert jetzt auch. Allerdings bleibt der Prozeß solange bei einer Überschrift im XML-File stehen, bis die Bedingung des Parameters nicht mehr zutrifft.:-/

Ist es möglich bei der Bedingung dynamisch zu ermitteln, wieviele Überschriften das XML-File hat. Mit count() und sum() habe ich es noch nicht geschafft. Oder kann ich auch eine xquery-Abfrage in mein XSLT-File einbauen?

Eigentlich wollte ich in der Kontrollstruktur choose zwei Auswahlmöglichkeiten haben und zwar:
<xsl:when test="@kapiteltyp='Hauptkapitel'">
und
<xsl:when test="@kapiteltyp='Unterkapitel'">
Allerdings bekomme ich das nicht mit dem Zählparameter hin.
Die Bedingung für den Parameter muß angeblich im choose-Konstrukt stehen.

Quelltext:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:preserve-space elements="test"/>
<xsl:template match="/">
<html>
<head>
<title>Handbuch</title>
</head>
<body>
<pre>
<xsl:apply-templates select="Handbuch/Handbuchinhalt/Kapitel">
<xsl:with-param name="Zaehlen">1</xsl:with-param>
</xsl:apply-templates>
</pre>
</body>
</html>
</xsl:template>

<xsl:template match="Handbuch/Handbuchinhalt/Kapitel" name="Schleife">
<xsl:param name="Zaehlen"/>
xsl:choose
<!-- Bei der Verarbeitung bleibt der Prozeß bei jeder Überschrift 27 x stehen, daher werden 27 x 27 Überschriften ausgegeben. -->
<xsl:when test="$Zaehlen &lt;=27 and @kapiteltyp='Hauptkapitel'">
<xsl:value-of select="concat($Zaehlen, '.' , ' ' , //Kapitel[position()=$Zaehlen])"/>
<br />
<xsl:call-template name="Schleife">
<xsl:with-param name="Zaehlen" select="$Zaehlen + 1"/>
</xsl:call-template>
</xsl:when>
<!--
<xsl:when test="@kapiteltyp='Hauptkapitel'">
<h1>
<xsl:value-of select="concat($Zaehlen, '.' , ' ' , node())"/>
</h1>
<br/>
<xsl:call-template name="Schleife">
<xsl:with-param name="Zaehlen" select="$Zaehlen + 1"/>
</xsl:call-template>
</xsl:when>
-->
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

Vielen Dank für Eure Hilfe schon mal im voraus!

Viele Grüße
verenice