XSLT Einführung – Templates Prinzip

Bei der Transformation eines XML Datensatzes liegt es nahe die Transformationssprache XSLT zu verwenden.

Das zentrale Element für die Transformation ist das <xsl:template> – Element. Der Prinzipielle Syntax ist leicht verständlich. Man definiert zunächst ein Template nach dem Prinzip <xsl:template match=”muster”>, wobei “muster” ein Element (Tag) im XML Datensatz ist.
Alle XSLT Anweisungen innerhalb eines solchen template-Elements werden nun auf alle Elemente des XML Datensatzes angewendet die auf das Muster passen (matchen).

Dabei ist, wie bei jeder XSL Transformation, die Reihenfolge in welcher die Anweisungen in der XSL-Datei notiert sind unwichtig, da der XSLT-Prozessor für die Reihenfolge der Ausgabe die Reihenfolge (Verschachtelungsgrades) des XML-Datensatzes ausliest.
Somit wird ein Template, welches auf ein root-Tag matched immer als erstes ausgeführt. Um nun nach einer solchen Regel noch weitere Regeln auszuführen, muss innerhalb dieses (und jeden weiteren Templates welches in der Hirarchie über einem anderen steht) der Befehl (das Tag) <xsl:apply-templates /> notiert werden. Denn nur so wird der XSLT-Prozessor dazu veranlasst alle weiteren Templates, tiefer als das im Moment ausgeführte auszuführen.

um folgende XML Datei zu transformieren…

<parent>
<cild></child>
</parent>

ist es also nicht korrekt nur zu notieren

<xsl:template match="parent">
Anweisungen zur Translation
</xsl:template>
<xsl:template match="child">
Anweisungen zur Translation
</xsl:template>

denn dann werden einfach nur die Anweisungen zur Translation von parent ausgeführt, die des child nicht.
Erst durch hinzufügen von <xsl:apply-templates/> wird veranlasst weiter Templates auszuführen.

korrekter Code:

<xsl:template match="parent">
Anweisungen zur Translation
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="child">
Anweisungen zur Translation
</xsl:template>

Natürlich kann man in komplexeren Transformationen statt dem auf alles matchenden Tags auch wieder ein <xsl:apply-templates match=”muster” /> innerhalb des Template Blockes ausführen.

Wenn dir dieser Beitrag gefällt, lade den Autor doch mal zu einem Drink ein ;-)

Broadcast us
  • Yigg
  • Webnews.de
  • Digg
  • MisterWong
  • del.icio.us
  • Technorati
  • DZone
  • Facebook
  • Google Bookmarks
  • Reddit
  • StumbleUpon
  • TwitThis

Tags: , ,

One Response

  1. [...] zunächst im März kleine Blogbeiträge unter anderem zum Internet Explorer background-image, XSLT Einführung – Templates Prinzip, und ein paar Surftipps zu Web 2.0 … The Machine is Us/ing Us, Oxford internet institute [...]

Leave a Reply