XSLT-Elemente

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

 

 

xsl:template

Die Deklaration xsl:template enthält Instruktionen deren Ausgabe direkt in das Ergebnisdokument eingetragen werden. Damit ist das xsl:template-Element das einzige Toplevel Element das einen direkten Output hat. Alle anderen Deklarationen müssen durch eine Instruktionen innerhalb eines Templates, aufgerufen werden. Jedoch wird der Output eines Templates nur nach dessen Aktivierung ins Ergebnisdokument übertragen.

Die Aktivierung eines Templates kann über xsl:apply-templates, xsl:apply-imports, xsl:call-template oder xsl:next-match wiederum als Instruktion eines Templates erfolgen. So kann nach einer Aktivierung eines Templates dafür gesorgt werden, dass andere Templates ebenfalls aktivert werden. Wird keine Endlosschleife verursacht, kann das Template durch eine entsprechende Instruktion sich selbst erneut aufrufen. Zu Beginn einer Transformation wird durch Build-In-Templates (zwei vom XSLT-Prozessor implizierte Templates, die nicht Teil des Stylesheets sind, aber als solche behandelt werden) die Aktivierung der Templates entsprechend der xsl:apply-templates-Instruktion durchgeführt.

Wird ein Template durch eine Instruktion aus einem Template heraus aufgerufen, wird der Output des aufgerufenen Templates an die Stelle im Ergebnisdokument eingefügt, an der der Aufruf stattfand. Werden mehrere Templates durch eine Instruktion aufgerufen, wird der Output in der aufgerufenen Templates in der Reihenfolge in der sie aufgerufen wurden aneinander gereiht. Dies geschieht, wenn beispielsweise durch xsl:apply-templates für Geschwisterknoten passende Templates gesucht werden. Die passenden Templates werden dann in der Reihenfolge aktiviert, in der die Geschwisterknoten im Quelldokument stehen.

Ein Template "passt" auf einen Knoten wenn dessen match-Attribut einen XPath-Ausdruck enthält, der auf diesen Knoten passt. Hierbei können absolute XPath-Ausdrücke angegeben werden, üblicher ist es jedoch relative Ausdrücke anzugeben. Ein absoluter XPath-Ausdruck "passt" auf einen Knoten, wenn der Knoten in der Knotensequenz enthalten ist, die durch den XPath-Ausdruck ausgegeben wird. Ein relativer XPath-Ausdruck passt auf einen Knoten wenn der XPath-Ausdruck Teil eines absoluten XPath-Ausdruck sein könnte, der wiederum auf den Knoten passt. Dies bedeutet beispielsweise, der relative Ausdruck match="section/titel" passt nur auf den Elementknoten title, wenn dieser auch ein Kindknoten des Elementknotens section ist. Hat ein Template ein match-Attribut, wird automatisch der passende Knoten im Quelldokument zum Kontextknoten. Ein Template muss ein match-Attribut haben, sofern es kein name-Attribut hat. Es kann auch sowohl ein match, als auch ein name-Attribut haben.

Besitzt ein Template das Attribut name kann es durch die Instruktion xsl:call-template aufgerufen werden. Hierzu muss der im name-Attribut angegebene Templatename von xsl:call-template mit dem von xsl:template identisch sein. Gibt es kein Template mit einem solchen Namen wird ein Fehler ausgegeben. Zwei Templates mit dem gleichen Namen dagegen sind auch verboten.

Treten zwei Templates auf, die mit dem match-Attribut auf den selben Knoten hinweisen, ist die Priorität entscheidend, die dem Template zugeordnet wird. Dies lässt sich manuel mit dem Attribut priority angeben oder wird aus der Genauigkeit des XPath-Ausdruckes im match-Attribut berechnet.

Zusätzlich kann mit Attributen angegeben werden, welchen Datentyps die Werte im Output des Templates angehören sollen (as) und ein Modus (oder mehrere Modi) definiert werden (mode), der die Ausführung des Templates nur erlauben, wenn die aufrufende Instruktion xsl:apply-templates diesen Modus aufruft.

Attribute

match, name, priority, mode, as

Beispiel 2

<?xml version="1.0"encoding="UTF-8"?>
<root>
  <section>
    <para style="bold">
    Als Gregor Samsa eines Morgens aus unruhigen Träumen erwachte, 
    fand er sich in seinem Bett zu einem ungeheueren Ungeziefer 
    verwandelt.
    </para>
  </section>
  <section>
    <para style="italic">
    Er lag auf seinem panzerartig harten Rücken und sah, wenn er 
    den Kopf ein wenig hob, seinen gewölbten, braunen, von 
    bogenförmigen Versteifungen geteilten Bauch, auf dessen Höhe 
    sich die Bettdecke, zum gänzlichen Niedergleiten bereit, kaum 
    noch erhalten konnte.
    </para>
  </section>
  <section>
    <para>
    Seine vielen, im Vergleich zu seinem sonstigen Umfang kläglich 
    dünnen Beine flimmerten ihm hilflos vor den Augen.
    </para>
  </section>
</root>
<?xml version="1.0"encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="/">
    <root>
        <xsl:apply-templates></xsl:apply-templates>
    </root>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0"encoding="UTF-8"?>
<root>
  Als Gregor Samsa eines Morgens aus unruhigen Träumen erwachte, 
  fand er sich in seinem Bett zu einem ungeheueren Ungeziefer 
  verwandelt.
  Er lag auf seinem panzerartig harten Rücken und sah, wenn er 
  den Kopf ein wenig hob, seinen gewölbten, braunen, von 
  bogenförmigen Versteifungen geteilten Bauch, auf dessen Höhe 
  sich die Bettdecke, zum gänzlichen Niedergleiten bereit, kaum 
  noch erhalten konnte.
  Seine vielen, im Vergleich zu seinem sonstigen Umfang kläglich 
  dünnen Beine flimmerten ihm hilflos vor den Augen.
</root>

Beispiel 3

<?xml version="1.0"encoding="UTF-8"?>
<root>
  <section>
    <para style="bold">
    Als Gregor Samsa eines Morgens aus unruhigen Träumen erwachte, 
    fand er sich in seinem Bett zu einem ungeheueren Ungeziefer 
    verwandelt.
    </para>
  </section>
  <section>
    <para style="italic">
    Er lag auf seinem panzerartig harten Rücken und sah, wenn er 
    den Kopf ein wenig hob, seinen gewölbten, braunen, von 
    bogenförmigen Versteifungen geteilten Bauch, auf dessen 
    Höhe sich die Bettdecke, zum gänzlichen Niedergleiten bereit, 
    kaum noch erhalten konnte.
    </para>
  </section>
  <section>
    <para>
    Seine vielen, im Vergleich zu seinem sonstigen Umfang 
    kläglich dünnen Beine flimmerten ihm hilflos vor den Augen.
    </para>
  </section>
</root>
<?xml version="1.0"encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:template match="/">
        <root>
            <xsl:apply-templates></xsl:apply-templates>
            <xsl:apply-templates mode="test"></xsl:apply-templates>
        </root>
    </xsl:template>
    <xsl:template match="root" mode="test">
        <test>
            <xsl:apply-templates></xsl:apply-templates>
        </test>
    </xsl:template>
</xsl:stylesheet>
<?xml version="1.0"encoding="UTF-8"?>
<root>
  Als Gregor Samsa eines Morgens aus unruhigen Träumen erwachte, 
  fand er sich in seinem Bett zu einem ungeheueren Ungeziefer 
  verwandelt. 
  Er lag auf seinem panzerartig harten Rücken und sah, wenn er 
  den Kopf ein wenig hob, seinen gewölbten, braunen, von 
  bogenförmigen Versteifungen geteilten Bauch, auf dessen Höhe 
  sich die Bettdecke, zum gänzlichen Niedergleiten bereit, kaum 
  noch erhalten konnte. Seine vielen, im Vergleich zu seinem 
  sonstigen Umfang kläglich dünnen Beine flimmerten ihm hilflos 
  vor den Augen.
<test>
  Als Gregor Samsa eines Morgens aus unruhigen Träumen erwachte, 
  fand er sich in seinem Bett zu einem ungeheueren Ungeziefer 
  verwandelt. Er lag auf seinem panzerartig harten Rücken und 
  sah, wenn er den Kopf ein wenig hob, seinen gewölbten, 
  braunen, von bogenförmigen Versteifungen geteilten Bauch, auf 
  dessen Höhe sich die Bettdecke, zum gänzlichen Niedergleiten 
  bereit, kaum noch erhalten konnte. Seine vielen, im Vergleich 
  zu seinem sonstigen Umfang kläglich dünnen Beine flimmerten 
  ihm hilflos vor den Augen.
</test>
</root>

Beispiel 4

<?xml version="1.0"encoding="UTF-8"?>
<root>
  <section>
    <para style="bold">
    Als Gregor Samsa eines Morgens aus unruhigen Träumen erwachte, 
    fand er sich in seinem Bett zu einem ungeheueren Ungeziefer 
    verwandelt.
    </para>
  </section>
  <section>
    <para style="italic">
    Er lag auf seinem panzerartig harten Rücken und sah, wenn er 
    den Kopf ein wenig hob, seinen gewölbten, braunen, von 
    bogenförmigen Versteifungen geteilten Bauch, auf dessen Höhe 
    sich die Bettdecke, zum gänzlichen Niedergleiten bereit, kaum 
    noch erhalten konnte.
    </para>
  </section>
  <section>
    <para>
    Seine vielen, im Vergleich zu seinem sonstigen Umfang kläglich 
    dünnen Beine flimmerten ihm hilflos vor den Augen.
    </para>
  </section>
</root>
<?xml version="1.0"encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
    <xsl:template match="/">
        <root>
            <xsl:apply-templates></xsl:apply-templates>
        </root>
    </xsl:template>
    <xsl:template match="root" as="xs:string">
        <test>
            <xsl:apply-templates></xsl:apply-templates></test>
    </xsl:template>
</xsl:stylesheet>
<?xml version="1.0"encoding="UTF-8"?>
<root xmlns:xs="http://www.w3.org/2001/XMLSchema">
  Als Gregor Samsa eines Morgens aus unruhigen Träumen erwachte, 
  fand er sich in seinem Bett zu einem ungeheueren Ungeziefer 
  verwandelt.
 
  Er lag auf seinem panzerartig harten Rücken und sah, wenn er 
  den Kopf ein wenig hob, seinen gewölbten, braunen, von 
  bogenförmigen Versteifungen geteilten Bauch, auf dessen 
  Höhe sich die Bettdecke, zum gänzlichen Niedergleiten bereit, 
  kaum noch erhalten konnte. 
 
  Seine vielen, im Vergleich zu seinem sonstigen Umfang kläglich 
  dünnen Beine flimmerten ihm hilflos vor den Augen.
 
</root>

Beispiel 5

<?xml version="1.0"encoding="UTF-8"?>
<root>
  <section>
    <para style="bold">
    Als Gregor Samsa eines Morgens aus unruhigen Träumen erwachte, 
    fand er sich in seinem Bett zu einem ungeheueren Ungeziefer 
    verwandelt.
    </para>
  </section>
  <section>
    <para style="italic">
    Er lag auf seinem panzerartig harten Rücken und sah, wenn er 
    den Kopf ein wenig hob, seinen gewölbten, braunen, von 
    bogenförmigen Versteifungen geteilten Bauch, auf dessen Höhe 
    sich die Bettdecke, zum gänzlichen Niedergleiten bereit, kaum 
    noch erhalten konnte.
    </para>
  </section>
  <section>
    <para>
    Seine vielen, im Vergleich zu seinem sonstigen Umfang kläglich 
    dünnen Beine flimmerten ihm hilflos vor den Augen.
    </para>
  </section>
</root>
<?xml version="1.0"encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
    <xsl:template match="/">
        <root>
            <xsl:apply-templates></xsl:apply-templates>
        </root>
    </xsl:template>
    <xsl:template match="root" as="xs:string" priority="2">
        <test>
            <xsl:next-match></xsl:next-match>
        </test>
    </xsl:template>
    <xsl:template mode="root" priority="1">
        <xsl:apply-templates></xsl:apply-templates>
    </xsl:template>
</xsl:stylesheet>
<?xml version="1.0"encoding="UTF-8"?>
<root xmlns:xs="http://www.w3.org/2001/XMLSchema">
  Als Gregor Samsa eines Morgens aus unruhigen Träumen erwachte, 
  fand er sich in seinem Bett zu einem ungeheueren Ungeziefer 
  verwandelt. 
 
  Er lag auf seinem panzerartig harten Rücken und sah, wenn er 
  den Kopf ein wenig hob, seinen gewölbten, braunen, von 
  bogenförmigen Versteifungen geteilten Bauch, auf dessen Höhe 
  sich die Bettdecke, zum gänzlichen Niedergleiten bereit, kaum 
  noch erhalten konnte. 
 
  Seine vielen, im Vergleich zu seinem sonstigen Umfang kläglich 
  dünnen Beine flimmerten ihm hilflos vor den Augen.
</root>

 

 

  > nach oben
   
  > zurück zur alphabetischen Liste der XSLT Elemente