Xpath ist eine Sprache, mit der auf einzelne Teile eines XML-Dokuments zugegriffen werden kann, wodurch XSLT-Transformationen praktisch überflüssig werden. Damit ist es auch ein unschätzbares Tool zur Verwaltung von XML-Daten in Webanwendungen.
Der Beispielcode verwendet die folgenden XML-Daten zur Bereitstellung der Funktionalität. (Anmerkung: Dieser Code wurde unter PHP 4.3.4, Windows XP und IIS 5.1 entwickelt und erfolgreich getestet.)
Diese XML-Daten enthalten einige Elemente und ein paar Attribute, inklusive einer Namespace-Deklaration – also etwas schlichtes XML. Damit lassen sich unterschiedliche Abfragen ausprobieren.
Zuerst wird eine lokale Variable erstellt, welche den XML-String aufnimmt. Diese Information könnte zum Beispiel als Teil eines POST HTTP-Request übergeben worden sein. Für dieses Beispiel sind die Daten einfach im Code enthalten. Der nächste Schritt besteht darin, ein DOM-Dokument mithilfe der Funktion domxml_open_mem() zu erstellen. Diese Funktion erstellt aus einem gültigen XML-String ein DOM Document-Objekt im Speicher. Es erwartet einen Parameter: den XML-String. Eine andere Möglichkeit besteht darin, den XML-Code in einer separaten Datei zu speichern und mit der Funktion domxml_open_file() aus der Datei zu laden. Diese Funktion erwartet als Parameter den Namen der XML-Datei. Sobald das DOM Document-Objekt erzeugt wurde, kann mit diesem Objekt und der Funktion Xpath_new_context() ein Xpath-Kontext erzeugt werden, welcher als Parameter das aktuelle DOM Document-Objekt übernimmt. Dieser Kontext wird zur Auswertung des Xpath-Ausdrucks verwendet und gegebenenfalls auch zum Registrieren von Namespaces verwendet. Da das Beispiel-XML einen Namespace enthält, wird dieser mit der Funktion Xpath_register_ns() registriert. Damit können Xpath-Abfragen erstellt werden, die Präfixe enthalten. Die Funktion Xpath_register_ns() erwartet drei Parameter: den Xpath-Kontext, das Präfix und den Namespace.
Nun kann man Xpath-Abfragen ausführen. Dies geschieht mithilfe der Funktion Xpath_eval(), deren erster Parameter der Xpath-Kontext und der zweite der Xpath-Ausdruck ist. Die Funktion gibt ein Array von DOM Nodes zurück. Im Beispielcode wird dieses Node-Set durchlaufen und eine entsprechende Ausgabe erzeugt.
Im ersten Xpath-Beispiel werden alle x:dog text-Elemente unterhalb der x:row-Knoten ausgelesen, bei denen das Attribut "color" gleich "yellow" ist. An dieser Stelle unterscheidet sich der Xpath-Ausdruck in PHP etwas von einem Xpath-Ausdruck in MSXML. Der "/text()"-Teil des Ausdrucks wurde eingefügt, um nur die Textknoten zurückzugeben. Bei MSXML greift man auf die Textknoten über die Eigenschaft "text" zu. Über die Eigenschaft "content" des zurückgegebenen Textknotens kann man dessen Inhalt auslesen.
Im zweiten Beispiel werden alle x:dog-Elemente unterhalb der x:row-Knoten ausgelesen. Diesmal wird allerdings die Methode dump_node() auf das DOM Document-Objekt angewandt, um den vollständigen XML-Code des entsprechenden Knotens auszudrucken. Die Methode dump_node() erwartet einen Parameter: den DOM Node, dessen Inhalt man ausgeben möchte.
Im letzten Beispiel werden alle x:cat-Textknoten und alle x:dog-Textknoten ausgelesen, bei denen das "color"-Attribut entweder "white" oder "grey" ist. Auch hier werden alle Knoten durchlaufen und der Inhalt jedes Textknotens ausgegeben. Und ganz zum Schluss sollte man das DOM Document-Objekt wieder aus dem Speicher entfernen.