Hallo,
danke für den Rang. Der Counter soll nichts anderes tun, als die ebene zu bestimmen.
Vielleicht wird es so etwas deutlicher
<root>
<name att="untertitel"/>
<root>
<einheit att1="untertitel" att2="unteruntertitel1" rang="1"/>
Ja, das ergibt mehr Sinn.
Also der Counter mach nichts anderes, als rekursive die ebene (stufe) zu bestimmen. Mir fällt kein anderer Weg ein.
0_titel
1_1_untertitel
2_1_unteruntertitel1
2_2_unteruntertitel2
Da wäre ein count() ganz sinnvoll:
-----------------------------------------
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/root">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<xsl:for-each select="name">
<xsl:sort select="count(document('temp1.xml')/root/einheit[@att1=current()/@att])" data-type="number" />
<xsl:sort select="document('temp1.xml')/root/einheit[@att2=current()/@att]/@rang" data-type="number" />
<xsl:variable name="rang" select="document('temp1.xml')/root/einheit[@att2=current()/@att]/@rang"/>
<xsl:variable name="stufe">
<xsl:call-template name="stufe_ermitteln">
<xsl:with-param name="att_uebergabe" select="@att"/>
</xsl:call-template>
</xsl:variable>
<!-- Ausgabe der Stufe und Rang und Bezeichnung -->
<xsl:value-of select="$stufe"/>
xsl:text_</xsl:text>
<xsl:value-of select="$rang"/>
xsl:text_</xsl:text>
<xsl:value-of select="@att"/>
<br/>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template name="stufe_ermitteln">
<xsl:param name="att_uebergabe"/>
<xsl:param name="counter" select="1"/>
xsl:choose
<xsl:when test="not(document('temp1.xml')/root/einheit[@att1=$att_uebergabe])">
<xsl:value-of select="$counter"/>
</xsl:when>
xsl:otherwise
<xsl:call-template name="stufe_ermitteln">
<xsl:with-param name="att_uebergabe" select="document('temp1.xml')/root/einheit[@att2=$att_uebergabe]/@att1"/>
<xsl:with-param name="counter" select="$counter + 1"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
-------------------------------
meine Ausgabe ist:
1_1_unteruntertitel1
1_2_unteruntertitel2
2__titel
3_1_untertitel
Falls das count() nicht ausreichend ist, wäre eine Gruppierung mit key() sinnvoll.
Grüße
Thomas