ThomasM: Reihenfolge der verarbeitung von templates bei XSLT

Beitrag lesen

Hallo Michael,

Um sicherzugehen, sollte man die default templates im xsl angeben. Also so etwas hier:

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()" />
  </xsl:copy>
</xsl:template>

Stellt sich für mich aber die Frage, ob die an den Anfang, ans Ende oder egal wo stehen können. Ich war immer daavon ausgegangen, dass die irgendwo stehen können, weil ja kein anderes Template matched.

Dieses Template kopiert alle Knoten 1:1 in die Ausgabe und wird üblicherweise als Identity-Template eingesetzt, meistens mit zusätzlichen Templates, welche spezielle Anpassungen regeln sollen. Oft <xsl:template match="..."/>, um Teile der Ausgangsstruktur auszuschließen oder, falls nicht leer, mit weiterem Template-Inhalt anzupassen.

Von daher ist dieses Verhalten bei HTML-Ausgaben eher unerwünscht.

Übrigens lässt sich dieses Identity-Template in XSLT 3.0 kompakter formulieren:

<xsl:mode on-no-match="shallow-copy"/>

Grüße,
Thomas