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>