Xpath Tutorial für Anfänger

Xpath-Tutorial

Xpath Tutorial für Anfänger

Mit der Erweiterung von XML als Auszeichnungssprache für den plattformübergreifenden Datenaustausch stieg der Bedarf an einem Standard, der es nicht XML-basierten Anwendungen ermöglicht, komplexe Abfragen für XML-Dokumente durchzuführen.

Hinweis

XML (Extensible Markup Language) ist eine Sprache zur Darstellung hierarchisch strukturierter Daten im Textformat. Die XML-Sprache ist sowohl für Menschen als auch für Computer lesbar und wird unter anderem zum Datenaustausch zwischen zwei Computersystemen im Internet verwendet.

Mit XQuery und XSLT entwickelte das W3C die erforderlichen Standards für den Softwarezugriff auf XML-Dokumente. Sie stellen Programmierschnittstellen für Anwendungen zur Verfügung, um auf XML-Dokumente zuzugreifen und Inhalte zu transformieren oder abzufragen. Die notwendige Bedingung in diesen Fällen ist ein Standard, der die Position von Elementen in XML-Dokumenten ermöglicht, dh eine Pfadbeschreibungssprache: Xpath.

Als Nächstes erklären wir das Xpath Data Model (XDM) und stellen die Syntax vor, auf der Xpath-Ausdrücke zum Auffinden von XML-Elementen basieren.

Index
  1. Was ist Xpath?
  2. Wie funktioniert Xpath?
  3. Knotentypen
    1. Elementknoten
    2. Dokumentknoten
    3. Attributknoten (Attributknoten)
    4. Textknoten
    5. Namespace-Knoten
    6. Verarbeitungsanweisungsknoten
    7. Kommentarknoten
  4. Standortrouten
    1. Achsen
    2. Knotentest
      1. Knotenname als Filterkriterium
      2. Knotentyp als Filterkriterium
      3. Platzhalterknotentest
      4. Kurznotation
    3. Predigt
      1. Allgemeine Prädikate
      2. Numerische Prädikate
  5. Zusätzliche Informationen zur XML-Pfadsprache

Was ist Xpath?

XML Path Language (Xpath) ist eine vom W3C entwickelte Pfadbeschreibungssprache für XML-Dokumente . Diese Sprache stellt Benutzern eine nicht XML-basierte Syntax zur Verfügung, mit der bestimmte Elemente in einem XML-Dokument gefunden werden können.

Xpath ist im Allgemeinen in eine Hostsprache integriert, die die Verarbeitung von XML-Elementen ermöglicht. XQuery wird beispielsweise verwendet, um Informationen aus XML-Elementen zu extrahieren, die sich in Xpath befinden. XSLT verwendet seinerseits die Abfragesprache bei der Transformation von XML-Dokumenten.

  • Xpath: Navigation in XML-Dokumenten
  • XQuery: Abfragen von XML-Dokumenten
  • XSLT: XML-Datentransformation

Die aktuelle Xpath 3.1-Version ist in der W3C-Empfehlung vom 21. März 2017 angegeben.

Hinweis

Trotz der Updates unterstützen viele XSLT-Prozessoren, Webbrowser und Anwendungen nur den Xpath 1.0-Standard von 1999.

Wie funktioniert Xpath?

Xpath basiert auf einem Datenmodell, das das XML-Dokument als eine Folge von Elementen interpretiert, die in einer Baumstruktur angeordnet sind . Diese Struktur des Xpath-Datenmodells ist vergleichbar mit der des Document Object Model (DOM), das im Webbrowser als Schnittstelle zwischen HTML und JavaScript fungiert.

Die Lokalisierung von XML-Elementen erfolgt basierend auf dem Unix-Registrierungssystem in Form von Pfadausdrücken. Die Bausteine ​​dieser Lokalisierungspfade sind Knoten, Achsen, Knotentests und Prädikate.

Knotentypen

Jedes der Elemente einer XML-Struktur wird als Knoten bezeichnet. Die Klassifizierung der Knoten wird sowohl durch die Reihenfolge des Auftretens im Dokument als auch durch das Interlacing der XML-Elemente definiert.

Das Xpath-Datenmodell unterscheidet sieben Knotentypen mit unterschiedlichen Funktionen:

  • Elementknoten
  • Dokumentknoten (Wurzelknoten) (ab XPath 2.0; früher als “Wurzelknoten” bezeichnet)
  • Attributknoten (Attributknoten)
  • Textknoten
  • Namespace-Knoten
  • Verarbeitungsanweisungsknoten
  • Kommentarknoten

Schauen wir uns die Knotentypen im Xpath-Datenmodell anhand eines Beispiels an. Das folgende XML-Dokument dient dem Datenaustausch in einer Buchreihenfolge und enthält die sieben Knotentypen.

  <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE Order SYSTEM "order.dtd"> <?xml-stylesheet type="text/css" href="style.css"?> <!--That is a comment!--> <order date="2019-02-01"> <address xmlns:shipping="http://localhost/XML/delivery" xmlns:billing="http://localhost/XML/billing"> <shipping:name>Ellen Adams</shipping:name> <shipping:street>123 Maple Street</shipping:street> <shipping:city>Mill Valley</shipping:city> <shipping:state>CA</shipping:state> <shipping:zip>10999</shipping:zip> <shipping:country>USA</shipping:country> <billing:name>Mary Adams</billing:name> <billing:street>8 Oak Avenue</billing:street> <billing:city>Old Town</billing:city> <billing:state>PA</billing:state> <billing:zip>95819</billing:zip> <billing:country>USA</billing:country> </address> <comment>Please use gift wrapping!</comment> <items> <book isbn="9781408845660"> <title>Harry Potter and the Prisoner of Azkaban</title> <quantity>1</quantity> <priceus>22.94</priceus> <comment>Please confirm delivery date until Christmas.</comment> </book> <book isbn="9780544003415"> <title>The Lord of the Rings</title> <quantity>1</quantity> <priceus>17.74</priceus> </book> </items> </order>  

Elementknoten

In der Xpath-Struktur bildet jedes der Elemente, aus denen das XML-Dokument besteht, einen Elementknoten, mit Ausnahme der XML-Deklaration und der Definition des Dokumenttyps am Anfang des Dokuments.

XML-Deklaration:

  <?xml version="1.0"? encoding="utf-8"?>  

Dokumenttypdefinition (DTD):

  <!DOCTYPE Order SYSTEM "order.dtd">  

Elementknoten beginnen mit einem Start-Tag und enden mit einem End- Tag und sind normalerweise interlaced.

Das erste Element im Dokument wird als Stammelement bezeichnet .

Im obigen Beispiel ist das Stammelement der Ordnungsknoten , der als übergeordnetes Element der Teilmenge der Adress- , Kommentar- und Elementknoten fungiert , die wiederum auch untergeordnete Elemente enthalten.

Dokumentknoten

Das Dokument ist die Wurzel der Baumstruktur. Im XML-Dokument ist dieser Knoten nicht sichtbar oder wird nicht durch Text dargestellt. Es ist vielmehr ein konzeptioneller Knoten, der alle Elemente des Dokuments einschließt. Die untergeordneten Elemente des Dokumentknotens sind sowohl das Stammelement als auch gegebenenfalls der Verarbeitungsanweisungsknoten und der Kommentarknoten.

See also  JPG oder PNG: Unterschiede und Eignung von Bildformaten

Attributknoten (Attributknoten)

Das Attribut eines XML-Elements wird im Xpath-Datenmodell als Attributknoten dargestellt. Jeder dieser Knoten besteht aus einem Bezeichner und einem untergeordneten Wert.

In dem Beispielcode, das erste Buch Element enthält das isbn Attribut mit dem Wert 9781408845660 .

  <book isbn="9781408845660">  

Der Attributknoten gehört zum Elementknoten; Er gilt jedoch nicht als Sohn.

Textknoten

Die Zeichen , die zwischen den Tags eines Elementknotens eingekapselt sind, der als Textknoten bezeichnet wird.

In dem Beispiel wird die Titelelementknoten enthält den Text Knoten Harry Potter und der Gefangene von Azkaban .

  Harry Potter and the Prisoner of Azkaban  

Namespace-Knoten

Den Namen von Elementen und Attributen in einem ordnungsgemäß zusammengesetzten XML-Dokument wird ein Namespace zugewiesen. Normalerweise wird diese Zuordnung von der DTD am Anfang des Dokuments festgelegt.

Wenn in einem XML-Dokument Elemente oder Attribute mit unterschiedlichen Namespaces verwendet werden, wird der betreffende Namespace explizit mit dem Attribut xmlns oder dem Präfix xmlns im Start-Tag des angegebenen Elements definiert. Der Wert des xmlns- Attributs muss ein URI (Uniform Resource Identifier) ​​sein , der angibt, welchem ​​Namespace ein Element zugeordnet ist. Das Zuweisen eines Namespace zu einem XML- Präfix kann sowohl mit dem Element als auch mit allen untergeordneten Elementen erfolgen. In der Baumstruktur entspricht jeder der Namespaces einem Namespace-Knoten.

In dem Beispielcode, zwei verschiedene Namensräume wurden für die XML definiert Adresse Element : xmlns: Versand und xmlns: Abrechnung. Die untergeordneten Elemente des Adresselements haben das entsprechende Präfix für ihre Klassifizierung.

  <address xmlns:shipping="http://localhost/XML/delivery" xmlns:billing="http://localhost/XML/ billing"> <shipping:name>Ellen Adams</shipping:name> <shipping:street>123 Maple Street</shipping:street> <shipping:city>Mill Valley</shipping:city> <shipping:state>CA</shipping:state> <shipping:zip>10999</shipping:zip> <shipping:country>USA</shipping:country> <billing:name>Mary Adams</billing:name> <billing:street>8 Oak Avenue</billing:street> <billing:city>Old Town</billing:city> <billing:state>PA</billing:state> <billing:zip>95819</billing:zip> <billing:country>USA</billing:country> </address>  

Kurz gesagt, das Präfix xmlns ermöglicht die eindeutige Unterscheidung von Elementen von verschiedenen Namespaces. In diesem Beispiel enthält das Straßenelement mit dem Versandpräfix die Informationen zur Versandadresse, während das Straßenelement mit dem Abrechnungspräfix dies tut Verweis auf die Rechnungsadresse.

Verarbeitungsanweisungsknoten

Verarbeitungsanweisungen für XML-Dokumente befinden sich außerhalb des Dokumentbaums und werden als Verarbeitungsanweisungsknoten bezeichnet. Der Verarbeitungsanweisungsknoten beginnt mit <? und endet mit ?> .

Im obigen Beispiel finden wir die folgende Verarbeitungsanweisung:

  <?xml-stylesheet type="text/css" href="style.css"?>  

Die syntaktische Konstruktion der XML-Deklaration am Anfang der Datei ähnelt der einer Verarbeitungsanweisung, wird jedoch nicht als Verarbeitungsanweisungsknoten im Sinne des Xpath-Datenmodells betrachtet.

Kommentarknoten

In einem XML-Dokument verarbeitet Xpath den als Kommentar markierten Inhalt als Kommentarknoten. Dieser Knoten enthält nur die hervorgehobenen Zeichen und nicht das Markup.

Im obigen Beispiel finden wir den folgenden Kommentarknoten:

  That is a comment!  

Standortrouten

Die Suche nach Knoten erfolgt mit Hilfe von sogenannten Standortpfaden. Ein Suchpfad ist ein Xpath-Ausdruck, mit dem Sie durch den Baum navigieren und die gewünschte Gruppe von Knoten auswählen können.

Suchpfade werden von links nach rechts analysiert und können absolut oder relativ sein . Ein absoluter Pfad beginnt am Dokumentknoten und wird durch den Schrägstrich (/) angegeben. Im Gegensatz dazu können relative Positionspfade an jedem anderen Knoten innerhalb der Baumstruktur beginnen. In diesem Fall wird der Startpunkt als Kontextknoten bezeichnet.

Der Pfadausdruck besteht aus Schritten, die durch Schrägstriche (/) getrennt sind, ähnlich wie beim Adressieren von Dateien in einem Registrierungssystem.

Jeder Schritt in einem Stream-Ausdruck besteht aus bis zu drei Teilen: Achse, Knotentest und einer beliebigen Anzahl von Prädikaten.

  • Achse: Die Achse bestimmt die Navigationsrichtung in der Baumstruktur aus den Kontextknoten oder den Dokumentknoten.
  • Knotentest: Der Knotentest ist ein Filter, mit dem eine Reihe von Knoten von allen auf der Achse befindlichen Knoten abgegrenzt wird.
  • Prädikate: Prädikate bieten die Möglichkeit, die ausgewählten Knoten erneut nach Achsenschritten und Knotentests zu filtern.

Die Schritte zum Suchen eines Xpath-Ausdrucks werden gemäß der folgenden Syntax definiert:

  Eje::prueba de nodo[predicado1][predicado2]?  

Notationsfunktion
/ Dient als Trennzeichen für die Schritte einer Route
:: Dient als Trennzeichen zwischen der Achse und dem Knotentest

Achsen

Die Xpath-Syntax ermöglicht das Navigieren durch die folgenden Achsen.

Achsenbezeichnung in Spanisch Ausgewählte Knoten
Kind Kind Alle direkt untergeordneten untergeordneten Knoten
übergeordneter übergeordneter Knoten Die übergeordneten Knoten unmittelbar darüber
Nachkomme Nachkomme Alle Nachkommenknoten des Kontextknotens
Vorfahr * Vorfahr Alle Knoten über dem Kontextknoten
folgende nächste Knoten Alle Knoten, die nach dem Dokumentknoten angezeigt werden, mit Ausnahme der untergeordneten Knoten
vorhergehende * vorherige Knoten Alle Knoten vor dem Kontextknoten mit Ausnahme der Vorfahren
Jüngere Geschwister nach folgenden Geschwistern Dies sind alle Knoten des XML-Dokuments, die vom selben übergeordneten Knoten stammen
Vorgängergeschwister * ältere Geschwister Dies sind alle vorhergehenden Knoten des XML-Dokuments, die vom selben übergeordneten Knoten stammen
Attribut Attribut Alle Attributknoten eines Elementknotens
Namespace-Namespace Alle Namespace-Knoten eines Elementknotens; Diese Achse ist ab Version 2.0 nicht in den Spezifikationen enthalten.
Selbstknoten in Bearbeitung Der Kontextknoten in Bearbeitung
Nachkommen oder selbst Nachkommen und der aktuelle Knoten Alle Nachkommenknoten des Kontextknotens und des Kontextknotens
Vorfahr oder Selbst * Der Kontextknoten und seine Vorfahren Alle Knoten Vorfahren des Kontextknotens und des Kontextknotens
See also  Legacy-Code: Arbeiten mit veraltetem oder unbekanntem Code

Hinweis

Die mit einem Sternchen (*) gekennzeichneten Achsen sind regressive Anwendungen, die gemäß Version 1.0 der Xpath-Spezifikation ein optionales Element darstellen, das von Standardanwendungen nicht unterstützt werden darf.

Die folgende Grafik zeigt eine schematische Darstellung der wichtigsten Achsen im Xpath-Datenmodell, beginnend mit dem Kontextknoten (in rot).

Xpath-Datenmodellachsen
Der Dokumentbaum wird in seiner Gesamtheit durch die fünf Achsen Selbst, Vorfahr, Nachkomme, Vorher und Nachher dargestellt. In der Grafik gibt es auch die untergeordneten und übergeordneten Achsen, die sich mit den Nachkommen- und Ahnenachsen überlappen. Die Buchstaben geben die Reihenfolge im Dokument an.

Die child :: axis gibt beispielsweise alle untergeordneten Elemente des Kontextknotens D zurück: Die Knotenmenge umfasst die Knoten E, H und I.

Knotentest

Mit dem Knotentest filtern Sie die von der Achse ausgewählten Knoten. Gemäß der Xpath-Spezifikation gibt es zwei mögliche Kriterien.

  • Knotenname: Filtern Sie die Knoten auf der Achse, die einen bestimmten Namen haben.
  • Knotentyp: Wählen Sie alle Knoten auf einer Achse aus, die denselben Typ haben.

Knotenname als Filterkriterium

Im obigen Beispielcode können alle Nachkommen des Dokumentknotens mit dem Namensbuch mit dem folgenden Pfadausdruck ausgewählt werden .

  /descendant::book  

Wenn unter allen Elementknoten jedoch mit dem Namen Buch, mögen Sie Filter nur diejenigen mit dem isbn Attribute , benötigen Sie einen Pfadausdruck mit zwei Schritten.

  /descendant::book/attribute::isbn  

Knotentyp als Filterkriterium

Wenn Sie einen Knotentyp als Filterkriterium für die Auswahl eines Knotensatzes definieren möchten , verwenden Sie die folgenden Funktionen:

Ausgewählte Knoten funktionieren
node () Die Funktion node () gibt alle Knoten der ausgewählten Achse zurück.
text () Die Funktion text () gibt alle Textknoten auf der ausgewählten Achse zurück.
comment () Die Funktion comment () gibt alle Kommentarknoten auf der ausgewählten Achse zurück.
Verarbeitungsanweisung () Die Funktion Verarbeitungsanweisung () gibt alle Verarbeitungsanweisungsknoten auf der ausgewählten Achse zurück.

Hinweis

Xpath 1.0 definiert 25 Funktionen, und ab Xpath 2.0 stehen 111 Funktionen zur Beschreibung von Standortpfaden zur Verfügung. Ein Kompendium finden Sie in der Empfehlung W3C Xpath und XQuery Functions and Operators 3.1 vom 21. März 2017.

Platzhalterknotentest

Wenn Sie anstelle von Knotentests den Abstandshalter * (Sternchen) verwenden, werden alle Knoten zurückgegeben, die dem Hauptknotentyp der ausgewählten Achse entsprechen. Das heißt, wenn eine Achse einen Elementknoten enthält, ist dies der Hauptknotentyp der Achse. Dies gilt für alle Achsen mit Ausnahme von Attributen und Namespaces, da der Hauptknotentyp in diesen Fällen der Attributknoten bzw. der Namespace-Knoten wäre.

Der folgende Stream-Ausdruck gibt beispielsweise alle Attribute des aktuellen Kontextknotens zurück:

  attribute::*  

Kurznotation

Für häufig verwendete Achsen und Lokalisierungsschritte wurden Abkürzungen definiert, die anstelle des vollständigen Pfadausdrucks in Englisch verwendet werden können.

Standardnotation Abkürzungsbeispiel
child :: empty child ist die Standardachse und ihre Beschreibung kann unterdrückt werden. Daher würde der Pfadausdruck child :: book / child :: title zu book / title gekürzt.
attribute :: @ Die Attributachse einschließlich der Punkte kann mit dem @ -Symbol abgekürzt werden.
Der Pfadausdruck book / attribute :: isbn gibt den isbn-Attributknoten des Buchelements zurück und wird in Kurznotation wie folgt gerendert: book / @ isbn.
/ descant-or-self :: node () / // Der Suchschritt / descant-or-self :: node () / gibt den Dokumentknoten und alle Nachkommen zurück. seine abgekürzte Form ist //. Geben Sie anstelle von / descant-or-self :: node () / child :: item // item ein, und der Suchpfad gibt alle Elementknoten im Dokument zurück.
parent :: node () .. Der Schritt parent :: node () gibt den übergeordneten Knoten des Kontextknotens zurück und wird mit … abgekürzt.
self :: node (). Der Schritt self :: node () gibt den aktuellen Kontextknoten zurück und wird mit abgekürzt. .
See also  Kinder programmieren: Sie lernen, während sie Spaß haben

Predigt

Mit Prädikaten können Sie die Knotensuche mithilfe des Achsen- und Knotentests optimieren.

Sie machen ein Drittel eines Lokalisierungsschritts aus, sind optional und werden in eckigen Klammern angegeben. Filterkriterien in Klammern werden als Ausdrücke formuliert, die unter anderem Pfadausdrücke, Funktionen, Operatoren und Zeichenfolgen enthalten.

Xpath unterstützt sowohl allgemeine als auch numerische Prädikate.

Allgemeine Prädikate

Die allgemeinen Prädikate filtern die Menge ausgewählter Knoten durch die y-Achse des Knotentests und weisen jedem Knoten einen Booleschen Wert ( wahr oder falsch ) zu, sodass nur Knoten vorhanden sind, die die Bedingung erfüllen und einen wahren Wert haben im Ergebnis enthalten.

Die Formulierung von Ausdrücken für allgemeine Prädikate erfolgt mittels Operatoren . Diese werden verwendet, um Knoten mit bestimmten Inhalten oder Merkmalen auszuwählen, z. B. alle Knoten mit bestimmten Zeichen, einem Attribut oder einem voreingestellten untergeordneten Element (wenn möglich an einer bestimmten Position).

In den folgenden Tabellen sehen Sie eine Zusammenfassung der verfügbaren Operatoren, die in arithmetische, logische und Vergleichsoperatoren unterteilt sind.

Funktion der arithmetischen Operatoren
+ Summe
– Subtraktion
* Multiplikation
div ganzzahliges Ergebnis der Division
Mod Modul

Vergleichsoperatoren Funktion
= gleich
! = ungleich
<weniger als; In XSLT benötigen Sie die & lt;
> größer als; In XSLT wird empfohlen, & gt;
<= kleiner oder gleich; in XSLT wird die & lt;
> = Größer oder gleich; In XSLT wird empfohlen, & gt;

Logische Operatoren Funktion
und logischer UND-Operator
oder logischer ODER-Operator

Im folgenden Beispiel wird das Prädikat [title = „Harry Potter und der Gefangene von Askaban“] begrenzt die Ergebnisse auf ein Element Knoten mit dem Namen Buch, dessen Kind – Element Titel enthält die Zeichenkette Harry Potter und der Gefangene von Askaban .

Hinweis

In diesem Beispiel wird die Xpath 3-Syntax verwendet, die bei Bedarf möglicherweise nicht von allen Online-Tools unterstützt wird. Die Abfragebeispiele, die wir hier präsentieren, können mit dem folgenden Online- Tester leicht gesehen werden : http://videlibri.sourceforge.net/cgi-bin/xidelcgi.

  /order/items/book[title="Harry Potter and the Prisoner of Azkaban"]  

Hier haben wir das ausgewählte Buch Element Knoten , der die Daten für die Harry – Potter – Buch enthält.

  <book isbn="9781408845660"> <title>Harry Potter and the Prisoner of Azkaban</title> <quantity>1</quantity> <priceus>22.94</priceus> <comment>Please confirm delivery date until Christmas.</comment> </book>  

Ein weiteres untergeordnetes Element dieses Elementknotens ist comment . Der Pfadausdruck müsste nur um zwei weitere Schritte erweitert werden, wenn wir seinen Inhalt auswählen möchten.

  /order/items/book[title="Harry Potter and the Prisoner of Azkaban"]/comment/text()  

Mit dem Kommentar Schritt (kurz für child :: Kommentar ) navigieren wir auf das Kind des Buches Element mit dem gleichen Namen und wählen Sie den Textknoten mit dem Text () Funktion . Dies entspricht der folgenden Zeichenfolge:

  Please confirm delivery date until Christmas.  

Wenn ein einzelner Pfadausdruck in einem Prädikat verwendet wird, ist dies ein Existenznachweis . Mit dem unten gezeigten Pfadausdruck wurde geprüft, ob das obige XML-Dokument einen oder mehrere Knoten mit dem Namen des Kommentars enthält .

Kurznotation:

  //book[comment]  

Standardnotation:

  /descendant-or-self::node()/child::book[child::comment]  

Der Pfad // book [comment] gibt alle Knoten mit dem Namensbuch zurück , die ein untergeordnetes Element namens comment haben .

Numerische Prädikate

Mit numerischen Prädikaten können Sie Knoten lokalisieren, indem Sie ihre Position angeben . Der folgende Pfadausdruck gibt den zweiten Knoten basierend auf seiner Position im Dokument zurück. Der Knotenname ist Buch .

  //book[2]  

Genau genommen ist das Prädikat [2] eine Abkürzung für [position () = 2] . Damit alle Xpath wählt zuerst die Knoten mit dem Namen Buch und filtert dann die Knoten , in dem die Position () = 2 – Funktion   einen booleschen Wert hat wahr .

Hinweis

Im Gegensatz zu anderen Programmiersprachen beginnen Xpath-Aufzählungen mit 1.

Zusätzliche Informationen zur XML-Pfadsprache

Auf der W3C-Website finden Sie eine Übersicht über die Entwicklungsstufen von XML Path Language sowie alle Standards und Entwürfe.

Ebenso finden Sie kostenlose Tools und Informationen zur Verwendung von Xpath mit Webanwendungen in MDN Web Docs und im Microsoft Developer Network.

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *