|
apply-templates |
|
|
XSL:
Mehrere templates einsetzen (apply-templates)Sich wiederholende XML-Elemente können auch mit Hilfe von separaten templates angezeigt werden. Erstellt man für jedes Element ein eigenes template, kann es über das XSLT-Element apply-templates aufgerufen werden. Mit apply-templates wird wie in Form einer Programmierschleife jedes Kind-Element (nur eine Stufe unterhalb des aktuellen Knoten), das der XPATH-Pfadangabe des Attributes match (current node) im Element template entspricht, nacheinander abgearbeitet. Ist ein Kind-Element (child) mit passenden template (richtige XPATH Angabe des Attributes match im Kind-Element) vorhanden, wird das template abgearbeitet. Wenn nicht, wird das Built In Template abgearbeitet. Gibt man bei dem XSLT-Element apply-templates kein select Attribut an und sind keine weiteren templates vorhanden, bleibt es ohne Auswirkungen. Der XSLT-Prozessor sucht ein weiteres template und findet, falls kein anderes template vorhanden ist, nur das Built In Template (Standardtemplate). Es werden alle Elemente durchlaufen und deren Textinhalt mit dem Standardtemplate angezeigt. Der XSLT-Debugger von z. B. XMLSPY gibt darüber Auskunft. Wenn dem Attribut select des XSLT-Elementes apply-templates eine XPATH-Anweisung hinzugefügt wird, die auf ein Element mit Textinhalt verweist, werden nur die direkt untergeordneten Knoten abgearbeitet. Verweist die XPATH Anweisung auf ein Element, das nur andere Elemente beinhaltet, werden alle untergeordneten Elemente mit ihren Textinhalten angezeigt. <xsl:apply-templates select="buchliste/buch"> weist jedem Element buch ein template für die Ausgabe zu. Dazu wird nach einem template gesucht, dessen match Attribut das Element buch referenziert. Im zweiten template wird ein solches gefunden. Die dortige XPATH Anweisung im Attribut match="buch" macht das Element buch zum aktuellen Element. Die folgenden XPATH Anweisung in den Attributen select nehmen in Form einer relativen Pfadangabe darauf Bezug. Läßt man das XSLT-Element apply-templates weg, wird nichts angezeigt. Ohne das zweite Template match="buch" (aber mit dem XSLT-Element apply-template) wird der Textinhalt aller Elemente ohne Attributwerte und ohne Leerzeichen mit Hilfe des Built In Template (Standardtemplate) angezeigt. Setzt man statt <xsl:apply-templates select="buchliste/buch"/> die XPATH-Angabe <xsl:value-of select="."/> wird der Textinhalt aller Elemente (nicht nur der direkt untergeordneten) wieder mit Hilfe des Built In Template (Standardtemplate) ohne Attributwerte aber mit Leerzeichen angezeigt. Das Attribut select="buchliste/buch" muss nicht erscheinen. Quelltext der XSLT-Datei: <?xml version="1.0" encoding="iso-8859-1"?> Beispieldateien: |