Fork me on GitHub

Web Development

Ein Lehrbuch für das Informatik oder Medien-Informatik Studium.

XPath ist eine Abfrage-Sprache zu XML, ähnlich zu einer Pfadangabe im Dateisystem. Aber während eine Pfadangabe nur ungefähr 3 Features kennt (“..” für den übergeordneten Ordner, die Wildcards “*” und “?”) hat XPath dutzende, wenn nicht hunderte Features.

XPath Intro

Aus dem Kurs “Introduction to Databases” von Prof.Jennifer Widom:

XPath in PHP / SimpleXML

Als Beispiel wird hier ein Output der Wikipedia-API verwendet: Informationen zu einem Bestimmten Bild Demo

Xml Code output der Wikipedia-API: Abfrage von Bild-Information

<api>
  <query>
    <pages>
      <page ns="6" title="Datei:2010-04-29-tulpen-by-RalfR-14.jpg" missing="" imagerepository="shared">
        <imageinfo>
          <ii thumburl="http://upload.wikimedia.org/wikipedia/commons/thumb/8/8b/2010-04-29-tulpen-by-RalfR-14.jpg/300px-2010-04-29-tulpen-by-RalfR-14.jpg" thumbwidth="300" thumbheight="451" url="http://upload.wikimedia.org/wikipedia/commons/8/8b/2010-04-29-tulpen-by-RalfR-14.jpg" descriptionurl="http://commons.wikimedia.org/wiki/File:2010-04-29-tulpen-by-RalfR-14.jpg"/>
        </imageinfo>
      </page>
    </pages>
  </query>
</api>

Um aus dieses XML nun in PHP Informationen zu extrahieren können wir XPath verwenden:

Php Code XML abfragen mit XPath in PHP

$xml_doc = new SimpleXMLElement("....xml von oben ...");

$query_result = $xml_doc->xpath( "//ii/@thumburl" );

$bild_url = (string) $query_result[0];

echo "<h1>Das Bild</h1>";
echo "<img src='$bild_url'>";

XPath in Javascript

XPath kann man verwenden um das HTML-Dokument selbst zu durchsuchen: Der folgende Code sucht alle h2-Element im aktuellen Dokument, und gibt sie in einem Ausgabefeld aus. Demo

Javascript Code XPath verwenden in HTML

iterator = document.evaluate('//h2', document, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null );
thisNode = iterator.iterateNext();
while (thisNode) {
  document.getElementById('output').value += thisNode.innerHTML + "\n";
  thisNode = iterator.iterateNext();
} 

In folgendem Beispiel wird ein String mit XML (den man z.B. schon serverseitig geladen und ins Javascript Eingefügt hat) in Javascript geparsed und mit XPath abgefragt. Demo

var xml_string, parser, doc, iterator, thisNode;

xml_string = '... <ii thumburl="http://upload.wikimedia.org/wikipedia/commons/thumb/8/8b/2010-04-29-tulpen-by-RalfR-14.jpg/300px-2010-04-29-tulpen-by-RalfR-14.jpg" thumbwidth="300" thumbheight="451" /> ....';
parser   = new DOMParser();
doc      = parser.parseFromString(xml_string, "application/xml");
iterator = doc.evaluate('//ii/@thumburl', doc, 
               null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null );
thisNode = iterator.iterateNext();
if (thisNode) {
  document.getElementById('bild').src = thisNode.value;
} 

Siehe Introduction to using XPath in JavaScript

Wo wird XPath im Web Development verwendet?

Mit Selenium kann man das Testen einer Webseite mit dem Browser automatisieren. Dazu schreibt man Skripts, mit den einzelnen Schritt die der Browser durchführen soll: “klicke hier, schreib das in ein Eingabefeld, drücke diesen Knopf”. Wie sagt man dem Browser welchen Link, welches Eingabefeld, welchen Knopf man meint? Mit XPath (siehe Selenium Dokumentation) oder mit CSS Selektoren oder mit einer ID.