Vorige Seite Hauptseite Nächste Seite
Mehrfache Ausgabe
In XSLT gibt es das Element
<xsl:result-document>.
Es gibt dazu viele Optionen, von denen ich nur einige bespreche.
format spezifiziert das
Ausgabeformat.href spezifiziert die
Ausgabedatei. method spezifiziert die
Ausgabemethode (html,
xhtml,
text,
xml).version gibt die Versionsnummer
des Ausgabeformats an (wie auch das version
Attribut von <xsl:output>
).<xsl:result-document>
die Spezifikation eines gesamten Ausgabedokuments packen. Dies wird dann
in die Datei ausgegeben, die mit Hilfe von href
benannt wurde. Dabei kann man so viele Dateien schaffen, wie man
möchte, weil ja href auch
Spezifikationen erlaubt wie {$Zahl},
wo Zahl eine Variable ist, die vorher
deklariert worden ist.
Mehrfache Eingabe
Die Eingabe einer weiteren Datei erfolgt nicht, wie man jetzt
erwarten würde, über einen analogen Befehl in XSLT. Sondern
es existiert eine Funktion
document()
mit deren Hilfe man eine Datei einlesen kann. Zum Beispiel hat
das Kommando
document('data.xml')
den Effekt, dass die Datei mit Namen
data.xml
einlesen wird. Der Baum steht dann zur Verarbeitung zur Verfügung.
Die Adressierung erfolgt dann wie folgt: die Adresse des Knotens
erhält man durch Voranstellen des Befehls
document('...').
Nur das sichert nämlich, dass XSLT in dem angegebenen Dokument
sucht und nicht in dem Baum des Hauptdokuments.
| document('data.xml')/... |
Man kann ihn zum Beispiel einer Variable zuweisen:
| <xsl:variable name="baum" select="document('data.xml')"/> |
data genauso,
wie sie bei XML-Strukturen auch funktioniert.
| <eintrag> |
| <name> |
| <nach>Mustermann</nach> |
| <vor>Erwin</vor> |
| </name> |
| <nummer>123456</nummer> |
| </eintrag> |
| <xsl:key name="telnr" match="//eintrag" use="nummer" /> |
<xsl:key>
hat die folgende Syntax.
| <xsl:key |
| name="Name" |
| match="Muster" |
| use="Ausdruck" /> |
name bekommt als Wert eine
Zeichenkette. Diese ist der Name des Schlüssels.
match bekommt als Wert ein
Muster, welches eine Menge von Knoten definiert. Diese ist zwar
als Liste implementiert, wird aber als Menge behandelt (Mehrfachnennungen
werden zB ignoriert).
use bekommt als Wert einen
Ausdruck. Dieser darf irgendein XPath-Ausdruck sein, der, gegeben
einen Knoten, der das Muster matcht, einen oder mehrere Werte
bekommt. Im Gegensatz zu IDs dürfen Schlüssel einem
Knoten mehrere Werte zuordnen.
| <?xml version="1.0" encoding="UTF-8"?> |
| <xsl:stylesheet version="1.0" |
| xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> |
| <xsl:key name="telnr" match="//eintrag" use="nummer"/> |
| <xsl:template match="/"> |
| <html> |
| <body> |
| <xsl:for-each select="key('telnr','123456')"> |
| <p> |
| Nummer: <xsl:value-of select="nummer"/><br /> |
| Name: <xsl:value-of select="name/nach"/>, <xsl:value-of select="name/vor"/>. |
| </p> |
| </xsl:for-each> |
| </body> |
| </html> |
| </xsl:template> |
| </xsl:stylesheet> |
java -jar /usr/share/java/saxon9he.jar -xsl:suche-nummer.xsl -o:ergebnis.html telbuch.xml |
/usr/share/java der
Pfad auf meinem Rechner zum Java-Archiv. Der kann also auf anderen
Rechnern anders aussehen. Bitte erst prüfen! Ebenso ist
saxon9he.jar die
Version 9 von Saxon Home Edition (=HE).
In vielen praktischen Anwendungen möchte man aber das Ergebnis
schnell per Zeilenbefehl bekommen und sich nicht vorher festlegen,
nach welcher Telefonnummer man suchen will. Da bietet es sich an,
die zu suchende Nummer als Parameter zu deklarieren:
| <?xml version="1.0" encoding="UTF-8"?> |
| <xsl:stylesheet version="1.0" |
| xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> |
| <xsl:key name="telnr" match="//eintrag" use="nummer"/> |
| <xsl:param name="tnr" required="yes" /> |
| <xsl:template match="/"> |
| <html> |
| <body> |
| <xsl:for-each select="key('telnr', $tnr)"> |
| <p> |
| Nummer: <xsl:value-of select="nummer"/><br /> |
| Name: <xsl:value-of select="name/nach"/>, <xsl:value-of select="name/vor"/>. |
| </p> |
| </xsl:for-each> |
| </body> |
| </html> |
| </xsl:template> |
| </xsl:stylesheet> |
schnellsuche.xsl
geschrieben, die dies mittels Eingabeparametern erledigt.
Hier ist der Zeilenbefehl für xalan:
xalan -in telbuch.xml -xsl schnellsuche.xsl -param tnr 123456 -out ergebnis.html |
java -jar /usr/share/java/saxon9he.jar telbuch.xml schnellsuche.xsl tnr="123456"
|