XPath-Tester

Dein Dokument und dein Ausdruck bleiben in diesem Browser.

Füge XML oder HTML mit bis zu 1.000.000 Zeichen ein. Die Auswertung erfolgt in diesem Browser mit XPath 1.0.

Absoluter oder relativer Ausdruck in XPath 1.0. Im Dokument deklarierte Präfixe werden automatisch registriert; ein Standard-Namespace ist unter dem Präfix d verfügbar.

XPath für Scraping oder XSLT zu schreiben ist reines Raten, wenn du keine Live-Testumgebung hast. Dieser Tester nimmt dein XML oder HTML in einem Feld und deinen Ausdruck im anderen entgegen, wertet XPath 1.0 mit der Engine deines eigenen Browsers aus und listet jeden Treffer mit Knotenart, Attributen, Textinhalt und serialisiertem Markup auf. Skalare Ausdrücke wie count(//book) liefern ihren Wert direkt zurück, und im Dokument deklarierte Namespace-Präfixe werden automatisch für dich registriert. Alles läuft in deinem Browser: Das Dokument wird nie hochgeladen.

So testest du einen XPath-Ausdruck

  1. 1

    XML oder HTML einfügen

    Die automatische Erkennung schaltet auf tolerantes HTML-Parsing um, sobald sie einen HTML-Doctype oder ein HTML-Wurzelelement sieht; du kannst den XML- oder HTML-Modus auch erzwingen.

  2. 2

    XPath eingeben

    Absolut (`/library/book`) oder relativ (`//div[@class='card']`), jeder beliebige XPath-1.0-Ausdruck.

  3. 3

    Auswerten

    Die XPath-Engine deines Browsers führt die Abfrage lokal aus; nichts wird an einen Server gesendet.

  4. 4

    Ergebnisse prüfen

    Jeder Treffer zeigt Knotenart, Attribute, gekürzten Text und serialisiertes Markup; bis zu 200 Treffer werden aufgelistet.

XPath 1.0 im Überblick

Ausdruck Trifft auf
/books/book <book>-Kinder der Wurzel <books>
//book Jedes <book> an beliebiger Stelle im Dokument
//book[@id='42'] <book> mit id-Attribut gleich 42
//book[1] Erstes <book> je Elternelement (nicht im Dok.)
(//book)[1] Erstes <book> im gesamten Dokument
//book[title='1984'] <book>, dessen <title>-Text „1984“ ist
//book/@id id-Attribute aller <book>-Elemente
//book[position() > 1] Alle <book> außer dem ersten
//book[last()] Letztes <book> je Elternelement

Skalare Ausdrücke funktionieren ebenfalls: count(//book) liefert eine Zahl, string(//title) eine Zeichenkette und boolean(//book[@id]) wahr oder falsch. Der Tester zeigt diese Werte direkt an statt einer Knotenliste.

Gängige Achsen jenseits von child

  • ancestor::, alle Vorfahren
  • following-sibling::, Geschwister nach dem aktuellen Knoten
  • preceding-sibling::, Geschwister davor
  • descendant::, alle Nachkommen
  • attribute:: (Kurzform @), Attribute des aktuellen Knotens
  • parent:: (Kurzform ..), das Elternelement

HTML-Eigenheiten

HTML ist kein striktes XML, deshalb parst der Tester es tolerant mit dem HTML-Parser deines Browsers statt mit dem strikten XML-Parser. Der HTML-Modus wird anhand von <!DOCTYPE html> oder einem <html>-Wurzelelement automatisch erkannt, und über die Auswahl für den Dokumentmodus kannst du jeden der beiden Modi erzwingen. Im HTML-Modus werden Tag- und Attributnamen kleingeschrieben, schreibe deinen XPath also in Kleinbuchstaben: //div[@class], nicht //DIV[@CLASS].

Namespaces

XML mit Namespaces braucht registrierte Präfixe:

<rss xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <item>
    <content:encoded>...</content:encoded>
  </item>
</rss>

Der Tester durchsucht das Dokument nach xmlns-Deklarationen und registriert jedes Präfix automatisch, sodass //content:encoded einfach funktioniert. Ein Standard-Namespace (ein bloßes xmlns="...") hat im Dokument kein Präfix, deshalb bindet der Tester ihn an das Präfix d: <item>-Elemente in einem Feed mit Standard-Namespace wählst du mit //d:item aus. Die registrierten Namespaces werden neben den Ergebnissen aufgelistet.

Was dieser Tester nicht auswertet

Browser werten XPath 1.0 aus, denselben Dialekt, den die meisten Scraping-Stacks verwenden. Funktionen aus XPath 2.0 und neuer, etwa matches(string, regex), tokenize(string, delimiter), for ... return-Ausdrücke und Sequenzoperatoren, gehören nicht dazu; du findest sie in XSLT-2.0/3.0-Toolchains. XPath 1.0 bleibt die portabelste Wahl fürs Web-Scraping.

Tipps zum Testen

  • Fang breit an und grenze ein. Erst //div, dann //div[@class], dann der konkrete Klassenwert.
  • Prüfe die Namespace-Deklarationen. Die meisten „Warum liefert mein XPath nichts?“-Fehler sind Namespaces; wirf einen Blick auf die Liste der registrierten Namespaces.
  • Achte auf Groß- und Kleinschreibung. XML unterscheidet Groß- und Kleinschreibung. Der HTML-Modus schreibt Namen klein.
  • Teste string() beim Extrahieren von Text. //p/text() und string(//p) unterscheiden sich, sobald verschachteltes Markup vorhanden ist.

Häufig gestellte Fragen

Nein, nur XPath. Die meisten Browser unterstützen beides über document.querySelectorAll (CSS) und document.evaluate (XPath). Nimm das, was für die Aufgabe klarer ist.

Beim HTML-Parsing werden Tag- und Attributnamen kleingeschrieben. Achte darauf, dass dein XPath Kleinbuchstaben verwendet: //div[@class], nicht //DIV[@CLASS]. Prüfe auch den Modus: Erzwungenes XML scheitert bei unsauberem HTML mit einem Parse-Fehler, während der HTML-Modus es tolerant parst.

Im Dokument deklarierte Präfixe werden automatisch für deinen Ausdruck registriert. Ein Standard-Namespace wird an das Präfix d gebunden, sodass //d:item die <item>-Elemente eines Dokuments mit Standard-Namespace auswählt. Die aktiven Zuordnungen werden bei den Ergebnissen aufgelistet.

Nein. Dokument und Ausdruck werden von der XPath-Engine deines eigenen Browsers ausgewertet und weder an unseren Server gesendet noch gespeichert oder an die Seitenadresse angehängt; sie bleiben nur in dieser Browser-Sitzung, damit die mehrstufige Ansicht deine Ergebnisse anzeigen kann.

Verwandte Tools