hh: Frage zum Sortieren mit XSL

Beitrag lesen

Hallo Thomas, die andere xml-Quelle sieht ungefähr so aus, etwas "vereinfacht" (ich hoffe das ich nichts übersehen habe) Mir ist kein anderer Lösungsweg eingefallen um das Ergebnis dann so zubekommen:

<root>
<name att="einebezeichnung"/>
<name att="eineanderebezeichnung"/>
<name att="nocheinebezeichnung"/>
<name att="undnocheinebezeichnung"/>
</root>

<root>
<einheit att1="eineanderebezeichnung" att2="einebezeichnung" rang="1"/>
<einheit att1="einebezeichnung" att2="nocheinebezeichnung" rang="1"/>
<einheit att1="einebezeichnung" att2="undnocheinebezeichnung" rang="2"/>
</root>

xsl-file

<xsl:for-each select="name">
<xsl:variable name="att_wert" select="@att"/>
<xsl:variable name="rang" select="document('quelle.xml')/einheit[@att2=$att_wert]/@rang"/>
<xsl:variable name="stufe">
<xsl:call-tempplate name="stufe_ermitteln">
<xsl:with param name="att_uebergabe" select="$att_wert"/>
</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_wert"/>
<br/>
</xsl:for-each>

<xsl:template name="stufe_ermitteln">
        <xsl:param name="att_uebergabe"/>
        <xsl:param name="counter" select="0"/>
        xsl:choose
            <xsl:when
                test="not(document('quelle.xml')/einheit[@att1=$att_uebergabe])">
                <xsl:value-of select="$counter"/>
                </xsl:when>
            xsl:otherwise
                <xsl:call-template name="stufe">
                    <xsl:with-param name="att_uebergabe"
                        select="document('quelle')/einheit[@att2=$att_uebergabe]/@att1"/>
                    <xsl:with-param name="counter" select="$counter + 1"/>
                </xsl:call-template>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

Zur Zeit bekomme ich dann ein Ergebnis wie folgt:

2_1_einebezeichnung
1_1_eineanderebezeichnung
3_1_nocheinebezeichnung
3_2_undnocheinebezeichnung

Wie schaffe ich es nun, die Ausgabe noch sortieren zu lassen? also etwa nach der stufe so:

1_1_eineanderebezeichnung
2_1_einebezeichnung
3_1_nocheinebezeichnung
3_2_undnocheinebezeichnung

Man könnte auch alles in ein XML-Quelle schreiben, das Problem dürfte aber das gleiche sein:

<root>
<name att="einebezeichnung"/>
<name att="eineanderebezeichnung"/>
<name att="nocheinebezeichnung"/>
<name att="undnocheinebezeichnung"/>
<einheit att1="eineanderebezeichnung" att2="einebezeichnung" rang="1"/>
<einheit att1="einebezeichnung" att2="nocheinebezeichnung" rang="1"/>
<einheit att1="einebezeichnung" att2="undnocheinebezeichnung" rang="2"/>
</root>