<xsl:template match="/"> <xsl:result-document href="soll.xml"> <xsl:apply-templates> <xsl:with-param name="is-soll" select="true()" tunnel="yes"/> </xsl:apply-templates> </xsl:result-document> <xsl:result-document href="haben.xml"> <xsl:apply-templates> <xsl:with-param name="is-soll" select="false()" tunnel="yes"/> </xsl:apply-templates> </xsl:result-document> </xsl:template> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="eintrag"> <xsl:param name="is-soll" tunnel="yes"/> <xsl:choose> <xsl:when test="$is-soll and @art='soll'"> <xsl:copy-of select="."/> </xsl:when> <xsl:when test="not($is-soll) and @art='haben'"> <xsl:copy-of select="."/> </xsl:when> <xsl:otherwise/> </xsl:choose> </xsl:template>Plain Text
Hier werden über eine Default-Kopierregel alle Knoten des XML Gerüsts kopiert, d.h. das Gerüst kann beliebig gross sein, und wir brauchen uns darum nicht kümmern. Insofern ist diese Lösung einen Schritt weit generischer, als die zuvor gezeigte. XSLT Konstrukte Tunnel Parameter
Wir sind sogar sehr flexibel was Änderungen angeht, da im Eintrag-Template leicht weitere Logik implementiert werden kann, die über alle Zweige der bedingten Anweisung greift, bspw. mittels einer lokalen Variablen, die einen Berechnungsausdruck enthält.