XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath...
-
Upload
bathilde-musser -
Category
Documents
-
view
129 -
download
1
Transcript of XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath...
XPath
Was ist XPath
• XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes.
• XPath benutzt Pfade, um XML-Elemente zu definieren.
• XPath definiert eine Bibliothek von Standardfunktionen.
• XPath ist ein Hauptelement in XSLT.
• XPath wird nicht in XML geschrieben.
• XPath ist ein W3C-Standard.
• XPath wurde für die Verwendung in XSLT und anderer XML-Parsing-Software entworfen.
Matthias WeibelXML Technologien Seminar SS ´02
XPath
XPath modelliert ein XML-Dokument als einen Baum, der aus Knoten besteht. Es gibt verschiedene Knotentypen, unter anderem Elementknoten, Attributknoten und Textknoten.
Matthias WeibelXML Technologien Seminar SS ´02
<?xml version="1.0" encoding="ISO-8859-1"?><catalog> <cd type="rock"> <!-- my favourite record --> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> </cd>
.
.
.</catalog>
/
catalog
cd
<!-- my… --> title artist
Empire... Bob Dylan
type=“rock“
XPath
XPath verwendet Lokalisierungspfade wie in einem Dateisystem, um Knoten in einem XML-Dokument auszuwählen.
Matthias WeibelXML Technologien Seminar SS ´02
<?xml version="1.0" encoding="ISO-8859-1"?><catalog>
<cd type="rock"><title>Empire Burlesque</title><artist>Bob Dylan</artist>
</cd><cd type="heavy metal">
<title>Back in Black</title><artist>AC/DC</artist>
</cd>...
</catalog>
/catalog/cd/artist(/child::catalog/child::cd/child::artist)
XPath
Lokalisierungspfad
• Ein Lokalisierungspfad besteht aus einem oder mehreren
Lokalisierungsschritten getrennt durch “/“.
Lokalisierungsschritt / Lokalisierungsschritt...
• Ein Lokalisierungsschritt hat die folgende Form:
Achse::Knotentest[Prädikat*]
• Die Achse spezifiziert die Beziehung zwischen den durch den Lokalisierungsschritt ausgewählten Knoten und dem Kontextknoten innerhalb des Baumes.
• Der Knotentest spezifiziert den Knotentyp und den erweiterten Namen der durch den Lokalisierungsschritt ausgewählten Knoten.
• null oder mehr Prädikate können die mittels beliebiger Ausdrücke die durch den Lokalisierungsschritt ausgewählte Knotenmenge weiter verfeinern.
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Beispiele Lokalisierungsschritte
• ancestor::div wählt alle div-Elemente aus, die Vorfahren des Kontextknotens sind
• child::para[attribute::type="warning"] wählt alle para-Kindelemente des Kontextknotens aus, die ein type-Attribut mit dem Wert warning besitzen
• child::para[position()=1] wählt das erste para-Kindelement des Kontextknotens aus
• child::para[attribute::type='warning'][position()=5] wählt das fünfte para-Kindelement des Kontextknotens aus, das ein Attribut type mit dem Wert warning besitzt
• child::para[position()=5][attribute::type="warning"]wählt das fünfte para-Kindelement des Kontextknotens aus, wenn dieses Kind ein type-Attribut mit dem Wert warning besitzt
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Beispiele Lokalisierungspfade
• /child::*/child::name/attribute::type wählt alle type-Attribute der name-Kindelemente aller Kinder des Kontextknotens.
• /child::catalog/child::cd/preceding-sibling::*wählt alle vorhergehenden Geschwister aller cd-Kindelement aller catalog-Kindelemente des Kontextknotens.
• /child::catalog/child::cd[position() = 2] wählt das zweite cd-Kindelement aller catalog-Kindelemente des Kontextknotens.
• /ancestor::*/attribute::*wählt alle Attribute der Vorfahrenknoten
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Die AchsenAchse::Knotentest[Prädikat*]
Es stehen folgende Achsen zur Verfügung:
• child enthält die Kinder des Kontextknotens.
• descendant enthält die Nachkommen des Kontextknotens. Die Nachkommenachse enthält niemals Attribut- oder Namensraumknoten.
• parent enthält den Elternknoten des Kontextknotens, falls es einen gibt.
• ancestor enthält die Vorfahren des Kontextknotens.
• following-sibling enthält alle nachfolgenden Geschwister des Kontextknotens; falls der Kontextknoten ein Attribut- oder Namensraumknoten ist, ist diese Achse leer.
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Die Achsen (Fortsetzung)
• preceding-sibling enthält alle vorhergehenden Geschwister des Kontextknotens; falls der Kontextknoten ein Attribut- oder Namensraumknoten ist, ist diese Achse leer.
• following enthält alle Knoten im gleichen Dokument wie der Kontextknoten, die nach dem Kontextknoten in Dokumentordnung auftreten, und zwar ohne seine Nachkommen und ohne Attribut- und Namensraumknoten.
• preceding enthält alle Knoten im gleichen Dokument wie der Kontextknoten, die vor dem Kontextknoten in Dokumentordnung auftreten, und zwar ohne seine Vorfahren und ohne Attribut- und Namensraumknoten.
• attribute enthält die Attribute des Kontextknotens; diese Achse ist leer, es sei denn, der Kontextknoten ist ein Elementknoten.
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Die Achsen (Fortsetzung)
• namespace enthält alle Namensraumknoten des Kontextknotens; diese Achse ist leer, es sei denn, der Kontextknoten ist ein Elementknoten.
• self enthält nur den Kontextknoten selbst.
• descendant-or-self enthält den Kontextknoten sowie die Nachkommen des Kontextknotens.
• ancestor-or-self enthält den Kontextknoten sowie die Vorfahren des Kontextknotens; diese Achse enthält somit immer den Wurzelknoten.
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Matthias WeibelXML Technologien Seminar SS ´02
(http://www.ejim.co.uk/module/overview/xpath.htm)
XPath
Knotentest
Achse::Knotentest[Prädikat*]
• *: Selektieren aller Knoten dieser Achse
child::* -> alle Kinder des Kontextknotens
• Knotenname: Selektieren aller Knoten mit diesem Name
child::div -> alle Kinder mit Knotenname div
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Knotentest (Fortsetzung)
• Knotentyp: Selektiert alle Knoten dieses Typs. Die folgenden Knotentypen sind möglich:
– node() child::node() -> alle Kinder, ausser Attribut- und Namensraumknoten
– text() child::text() -> alle Kinder, die Texknoten sind
– comment()child::comment -> alle Kinder, die Kommentarknoten sind
– processing-instruction()child::processing-instruction -> alle Kinder, die processing instruction-Knoten sind.
– processing-instruction(“target“)child::proccessing-instruction(‘xml-stylesheet‘) -> processing instruction-Knoten der Form (<?xml-stylesheet ... ?>)
Matthias WeibelXML Technologien Seminar SS ´02
XPath
PrädikateAchse::Knotentest[Prädikat*]
• Prädikate können als Filter benutzt werden, um die Knotenmenge definiert durch Achse und Knotentest noch weiter zu verfeinern.
• Es sind null oder mehr Prädikate möglich.
[x Operator einWert]
x: kann entweder ein weiterer Lokalisierungsschritt, im Verhältnis zu den Knoten, die bis jetzt durch den Knoten-Test und der Achse selektiert werden, oder eine eingebaute XPath Funktion sein.
Operator: ist ein Boolean Operator, wie “=“, “!=“, “>“, usw.(Achtung für “>“ und “<“ sollte “>“ und “<“ verwendet werden.)
einWert: ist der Wert mit dem x verglichen werden sollte.
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Prädikate (Fortsetzung)
Beispiele:
• [position() = 1] liefert den ersten Knoten der Knotenmenge in der Dokumentreihenfolge
• [attribute::type != "rock"] liefert alle Knoten der Knotenmenge, die ein Attribut “type“ besitzen und dessen Wert ungleich “rock“ ist.
• [position() = 1 and attribute::type != "rock"] liefert den ersten Knoten der Knotenmenge, wenn er ein Attribute “type“ besitzt und dessen Wert ungleich “rock“ ist.
• [attribute::type != "rock"] [position() = 1] liefert den Knoten der Knotenmenge, welcher der erste Knoten der Knotenmenge aller Knoten, die ein Attribut “type“ besitzen und dessen Wert ungleich “rock“ ist.
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Funktionen
Die Funktionsbibliotheke von XPath enthält einen Satz von Funktionen, die es erlauben, Ausdrücke auszuwerten.
Die Bibliotheke ist unterteilt in 4 Gruppen
• Funktionen auf KnotenmengenÜbernehmen als Argument Knotenmengen, geben Knotenmengen oder Informationen über einen bestimmten Knoten der Knotenmenge zurück.
• ZeichenkettenfunktionenFühren auf Zeichenketteargumente Auswertungen, Formatierungen und Manipulationen durch.
• Boolesche FunktionenWerten die Argumentausdrücke aus, um ein boolesches Resultat zu erhalten.
• ZahlenfunktionenWerten die Argumentausdrücke aus, um ein numerisches Resultat zu erhalten.
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Knotenmengenfunktionen
• number last(): liefert eine Zahl, die gleich der Größe des Kontextes des ausgewerteten Ausdrucks ist.
/child::*[last()] -> das letzte Kind des Kontextknotens
• number position(): liefert eine Zahl, die gleich der Position im Kontext des ausgewerteten Ausdrucks ist./child::*[position()=3] -> das dritte Kind des Kontextknotens
• number count(node-set): liefert die Anzahl der Knoten der übergebenen Knotenmenge.count(/child::*) liefert die Anzahl Kinder des Kontextknotens
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Zeichenkettenfunktionen
• string string(object?): konvertiert ein Objekt in eine Zeichenkette
• string concat(string, string, string*): liefert die Verkettung ihrer Argumente.
• boolean starts-with(string, string): liefert den logischen Wert wahr, falls die im ersten Argument übergebene Zeichenkette mit der im zweiten Argument übergebenen Zeichenkette beginnt, und andernfalls falsch.
• boolean contains(string, string):liefert den logischen Wert wahr, falls die im ersten Argument übergebene Zeichenkette die im zweiten Argument übergebene Zeichenkette enthält, und andernfalls falsch.
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Boolesche Funktionen
• boolean boolean(object): konvertiert ihr Argument wie folgt in einen Boolean-Wert: – Eine Zahl ergibt den Wert wahr genau dann, wenn sie weder positiv oder
negativ Null noch NaN ist.
– Eine Knotenmenge ergibt den Wert wahr genau dann, wenn sie nicht leer ist.
– Eine Zeichenkette ergibt genau dann den Wert wahr, wenn ihre Länge ungleich Null ist.
• boolean not(boolean): liefert den Wert wahr, wenn ihr Argument falsch ist, und ansonsten falsch.
• boolean true(): liefert den Wert wahr.
• boolean false():liefert den Wert falsch.
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Zahlenfunktionen
• number number(object?): konvertiert ihr Argument in eine Zahl.
• number sum(node-set): liefert die Summe aller in eine Zahl konvertierten Zeichenkettenwerte der Knoten aus der Argumentknotenmenge.
• number floor(number): liefert die größte Zahl (die am nächsten an positiv unendlich liegt), die nicht größer als das Argument und ganzzahlig ist.
• number ceiling(number): liefert die kleinste Zahl (die am nächsten an negativ unendlich liegt), die nicht kleiner als das Argument und ganzzahlig ist.
• number round(number): liefert die Zahl, die am nächsten am Argument liegt und die ganzzahlig ist.
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Abgekürzte Syntax
Mit Hilfe der abgekürzten Syntax lassen sich Lokalisierungsschritte mit weniger Schreibaufwand erstellen.
child (default)kann weggelassen werden. Die Standardachse ist also child.div/para ist abkürzend für child::div/child::para.
parent ..wählt den Elternknoten des Kontextknotens aus.
descendant ////item wählt alle item-Elemente aus dem gleichen Dokument wie der
Kontextknoten aus.
attribute @../@lang wählt das Attribut lang des Elternknotens des Kontextknotens aus.
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Abgekürzte Syntax (Fortsetzung)
self .. wählt den Kontextknoten aus.
position() = number numberelem[3] wählt das dritte elem-Kindelement des Kontextknotens aus.
weitere Beispiele:
para[5][@type="warning"] wählt das fünfte para-Kindelement des Kontextknotens aus, falls dieses Kind ein Attribut type mit dem Wert warning besitzt.
@* wählt alle Attribute des Kontextknotens aus.
para[last()] wählt das letzte para-Kindelement des Kontextknotens aus.
Matthias WeibelXML Technologien Seminar SS ´02
XPath
Informationsquellen
• w3c Spezifikation: (http://www.w3.org/TR/xpath)
• Deutsche Übersetzung: (http://www.informatik.hu-berlin.de/~obecker/obqo/w3c-trans/xpath-de/
• XPath Explorer: (http://www.purpletech.com/xpe/index.jsp)
• XPath TV: (http://www.ejim.co.uk/module/overview/xpath.htm)
• Microsoft msdn: (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/htm/xpath_devguide_overview_86gn.asp?frame=true)
• XPath Referenz: (http://www.vbxml.com/xsl/XPathRef.asp)
• O‘Reilly Referenz: (http://www.oreilly.com/catalog/xmlnut/chapter/ch09.html)
• Tutorials: (http://www.zvon.org/xxl/XPathTutorial/General/examples.html) (http://www.w3schools.com/xpath/default.asp)
Matthias WeibelXML Technologien Seminar SS ´02