XPath als W3C Standard ist ein Teil der XML-Zukunft. Mit XPath können alle Elemente eines XML Dokumentes adressiert werden und auf diese Weise über ein XSL-Stylesheet bestimmte Teile eines XML-Dokumentes ausgegeben werden.
XSL ist der Überbegriff für ein komplexes, von XML abgeleitetes System. Es besteht im wesentlichen aus drei Teilen:
- XSLT für die Transformation von XML Dokumenten
- XPath für die Definition von Teilen eines XML Dokuments
- XSLT-FO für das formatieren von XML Dokumenten
In diesem Bereich wollen wir uns insbesondere mit XPath und seiner Funktionalität beschäftigen. Als W3C Standard ist XPath eines der wichtigsten Elemente von XSLT; anders wie XSL ist es nicht in XML geschrieben. XPath verfügt über eine Bibliothek an Funktionen, über die die einzelnen Bereiche eines XML Dokumentes definiert werden.
XPath verwendet für die Definition einzelner Knoten (Elemente) eines Dokumentes Pfadausdrücke, wie wir sie aus dem Dateisystem erkennen. Das folgende Beispiel soll dies verdeutlichen:
artikel.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<artikel>
<titel>Der Titel</titel>
<teaser>Der Teaser, eine kurze Beschreibung</teaser>
<inhalt>Der Artikelinhalt an sich</inhalt>
<preis>20</preis>
</artikel>
Mit folgenden XPath Ausdruck wird auf das Wurzelelement, den Wurzelknoten <artikel> zugegriffen.
/artikel
Wohingegen der folgende Ausdruck auf das <titel> Element zugreift.
/artikel/titel
In einem XSL Stylesheet möchte man nur den Inhalt des Titel-Elementes ausgeben. Das hierzu notwendige Stylesheet sieht dann so aus:
artikel.xsl
<?xml
version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/artikel">
<b><xsl:value-of select="artikel/titel"/></b>
</xsl:template>
</xsl:stylesheet>
In das XML-Dokument muss nur noch das Stylesheet eingebunden werden. Dies geschieht über die XSL Anweisung:
<?xml-stylesheet
type="text/xsl" href="artikel.xsl"?>
Das Ergebnis im Browser sieht so aus, dass nur das Titel-Element fett ausgegeben wird.
Das XSL Stylesheet kann man bei der Pfadanweisung noch vereinfachen, indem bei dem
<xsl:value-of select="artikel/titel"/>
Element einfach nur
<xsl:value-of select="/titel"/>
geschrieben wird. Dies ist möglich, da auf den Wurzelknoten “artikel” ja bereits über
<xsl:template match="/artikel">
zugegriffen wurde.
XPath ist ein relativ mächtiges Sprachkonstrukt für XSL, da es über eine eingebaute Funktionsbibliothek verfügt. Erweitert man das obere XML-Dokument und macht daraus eine Datenbank mit Attributen kann man XPath und seine Funktionen einsetzen.
artikel.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<content>
<artikel>
<titel autor="sl">>Der Titel</titel>
<teaserDer Teaser, eine kurze Beschreibung</teaser>
<inhalt>Der Artikelinhalt an sich</inhalt>
<preis>20</preis>
</artikel>
<artikel id="2">
<titel autor="tf"> Der 2. Titel</titel>
<teaser> Der 2. Teaser, eine kurze Beschreibung</teaser>
<inhalt>Der 2. Artikelinhalt an sich</inhalt>
<preis>15</preis>
</artikel>
</content>
Möchte man über XSL lediglich das letzte Element des XML Dokumentes auslesen, so ist auch das möglich:
/content/artikel[last()]
Die Funktion last() ist eine in der XPath Programmbibliothek mitgelieferte Funktion. Das XSL-Stylesheet würde dann so aussehen:
artikel.xsl
<?xml
version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/content/artikel[last()]">
<b><xsl:value-of select="titel"/></b>
</xsl:template>
</xsl:stylesheet>
Hierbei wird nur der Titel des letzten Artikel Elementes im XML Dokument fett ausgegeben. Die Liste aller in XPath integrierten Funktionen sind beim W3C einsehbar. Es gibt noch viel mehr Funktionen, mit denen insbesondere logische Operationen durchgeführt werden können. Um XPath effektiv einsetzen zu können, muss man XSL beherrschen.
Möchte man nur auf das erste Element vom Typ <artikel> zugreifen, ist das auf diese Weise machbar:
/content/artikel[1]
Anhand des Indexes kann auf alle Elemente einzeln zugegriffen werden.
Man kann die Pfade auch mit // starten lassen. Hierbei werden auf alle Elemente des XML-Dokumentes, welche das Kriterium erfüllen, zugegriffen – selbst wenn sie sich in unterschiedlichen Elementverschachtlungen befinden.
Über
/content/artikel[preis]
wird nur auf die <artikel> Elemente zugegriffen, die ein Preis-Element als Kind haben. Da dies in unserem Beispiel bei beiden der Fall ist, wird auch auf beide zugegriffen. Das Ergebnis könnte über ein xsl-for each Konstrukt ausgegeben werden.
Es können auch logische Operationen durchgeführt werden.
Operator | Beschreibung |
= | Gleich |
!= | Ungleich |
< | Kleiner |
<= | Kleiner gleich |
> | Größer |
>= | Größer gleich |
Boolsche Operatoren | |
or | Oder |
and | Und |
So könnte man mit folgendem Pfad auf alle Artikel mit einem Preis kleiner als 20 zugreifen.
/content/artikel[preis<20]
Wie in einem Dateisystem können über XPath auch unbekannte XML Elemente gesucht werden. Dies erfolgt über sogenannte Wildcards. Folgende Pfadanweisung greift auf alle <artikel> Elemente zu:
/content/artikel/*
Anders sieht es bei diesem Konstrukt aus:
/*/*/preis
Hierbei werden auf alle Preis-Elemente in der dritten Ebene zugegriffen. Das heißt, dass in unserem Dokument <artikel.xml> auf alle Preiselemente zugegriffen wird.
Über //* wird auf alle Elemente des XML Dokuments zugegriffen.
Es können natürlich auch auf einzelne Attribute zugegriffen werden; alle Attribute werden in XPath über @ angesprochen. Der folgende Pfad greift nur auf die <artikel> Elemente zu, die sowohl ein <preis> Element haben, also auch ein id-Attribut.
/content/artikel[preis and @id]
In diesem Fall ist das der zweite Artikel; der erste verfügt über kein id-Attribut. Auch hierbei könne Wildcards verwendet werden. So ergibt der Pfad in unserem Beispiel das gleiche Ergebnis, jedoch wird hierbei auf alle <artikel> Elemente zugegriffen, die über irgendein Attribut verfügen:
/content/artikel[preis
and @*]
Möchte man nur auf die Artikel, bei denen der Autor „sl“ (Attribut des titel-Elementes) ist, so sieht das XSL Stylesheet dann so aus:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/content/artikel/titel[@autor='sl']">
<b><xsl:value-of select="//titel"/></b><br/>
<b><xsl:value-of select="//teaser"/></b><br/>
</xsl:template>
</xsl:stylesheet>
Wichtig ist, dass bei der Ausgabe über das XSL Konstrukts
<xsl:value-of select="//titel"/>
der Pfad des auszugebenden Elementes mit // angegeben wird. Dadurch werden alle Elemente, die das im Pfad definierte Kriterium erfüllen ausgeben. Es ist also kein absoluter Pfad.
XPath liefert noch viele weitere interessante Funktionen und Anwendungsmöglichkeiten, die XSL noch deutlich dynamischer lassen werden.
Wie hilfreich war dieser Beitrag?
Klicke auf die Sterne um zu bewerten!
Durchschnittliche Bewertung 0 / 5. Anzahl Bewertungen: 0