Testeur XPath

Votre document et votre expression restent dans ce navigateur.

Collez du XML ou du HTML jusqu'à 1 000 000 de caractères. L'évaluation s'effectue dans ce navigateur avec XPath 1.0.

XPath 1.0 absolu ou relatif. Les préfixes déclarés dans le document sont enregistrés automatiquement ; l'espace de noms par défaut est disponible sous le préfixe d.

Écrire du XPath pour du scraping ou du XSLT relève du tâtonnement sans bac à sable en direct. Ce testeur reçoit votre XML ou HTML dans un panneau et votre expression dans un autre, évalue le XPath 1.0 avec le moteur de votre propre navigateur et liste chaque nœud trouvé avec son type, ses attributs, son contenu textuel et son balisage sérialisé. Les expressions scalaires comme count(//book) renvoient directement leur valeur, et les préfixes d’espaces de noms déclarés dans le document sont enregistrés pour vous. Tout s’exécute dans votre navigateur : le document n’est jamais téléversé.

Comment tester une expression XPath

  1. 1

    Collez du XML ou du HTML

    La détection automatique bascule vers une analyse HTML tolérante dès qu'elle voit un doctype ou une racine HTML ; vous pouvez aussi forcer le mode XML ou HTML.

  2. 2

    Saisissez votre XPath

    Absolue (`/library/book`) ou relative (`//div[@class='card']`), toute expression XPath 1.0.

  3. 3

    Évaluez

    Le moteur XPath de votre navigateur exécute la requête en local ; rien n'est envoyé à un serveur.

  4. 4

    Inspectez les résultats

    Chaque correspondance affiche le type de nœud, les attributs, le texte tronqué et le balisage sérialisé ; jusqu'à 200 correspondances sont listées.

L’essentiel de XPath 1.0

Expression Ce qu’elle sélectionne
/books/book Les <book> enfants de la racine <books>
//book Chaque <book> n’importe où dans le document
//book[@id='42'] Les <book> dont l’attribut id vaut 42
//book[1] Le premier <book> de chaque parent (pas du doc.)
(//book)[1] Le premier <book> de tout le document
//book[title='1984'] Les <book> dont le texte de <title> est « 1984 »
//book/@id Les attributs id de tous les éléments <book>
//book[position() > 1] Tous les <book> sauf le premier
//book[last()] Le dernier <book> de chaque parent

Les expressions scalaires fonctionnent aussi : count(//book) renvoie un nombre, string(//title) une chaîne et boolean(//book[@id]) vrai ou faux. Le testeur affiche ces valeurs directement au lieu d’une liste de nœuds.

Les axes courants au-delà de child

  • ancestor::, tous les ancêtres
  • following-sibling::, les frères situés après le nœud courant
  • preceding-sibling::, les frères situés avant
  • descendant::, tous les descendants
  • attribute:: (raccourci @), les attributs du nœud courant
  • parent:: (raccourci ..), l’élément parent

Particularités du HTML

Le HTML n’est pas du XML strict, le testeur l’analyse donc avec tolérance grâce à l’analyseur HTML de votre navigateur plutôt qu’avec l’analyseur XML strict. Le mode HTML est détecté automatiquement à partir de <!DOCTYPE html> ou d’une racine <html>, et le sélecteur de mode de document vous permet de forcer l’un ou l’autre mode. En mode HTML, les noms de balises et d’attributs sont mis en minuscules : écrivez donc votre XPath en minuscules, //div[@class] et non //DIV[@CLASS].

Espaces de noms

Le XML avec espaces de noms exige l’enregistrement des préfixes :

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

Le testeur parcourt le document à la recherche des déclarations xmlns et enregistre chaque préfixe automatiquement : //content:encoded fonctionne donc sans rien faire. Un espace de noms par défaut (un simple xmlns="...") n’a pas de préfixe dans le document, le testeur le lie donc au préfixe d : sélectionnez les <item> d’un flux à espace de noms par défaut avec //d:item. Les espaces de noms enregistrés sont listés à côté des résultats.

Ce que ce testeur n’évalue pas

Les navigateurs évaluent XPath 1.0, le dialecte utilisé par la plupart des outils de scraping. Les fonctionnalités de XPath 2.0 et ultérieur, comme matches(string, regex), tokenize(string, delimiter), les expressions for ... return et les opérateurs de séquences, n’en font pas partie ; vous les trouverez dans les chaînes d’outils XSLT 2.0/3.0. XPath 1.0 reste le choix le plus portable pour le scraping web.

Conseils pour vos tests

  • Commencez large, puis affinez. D’abord //div, puis //div[@class], puis la valeur précise de la classe.
  • Vérifiez les déclarations d’espaces de noms. La plupart des « pourquoi mon XPath ne renvoie rien ? » viennent des espaces de noms ; consultez la liste des espaces de noms enregistrés.
  • Attention à la casse. XML est sensible à la casse. Le mode HTML met les noms en minuscules.
  • Testez string() pour extraire du texte. //p/text() et string(//p) diffèrent dès qu’il y a du balisage imbriqué.

Questions fréquentes

Non, uniquement XPath. La plupart des navigateurs prennent en charge les deux via document.querySelectorAll (CSS) et document.evaluate (XPath). Utilisez celui qui est le plus clair pour la tâche.

L’analyse HTML met les noms de balises et d’attributs en minuscules. Vérifiez que votre XPath est en minuscules : //div[@class] et non //DIV[@CLASS]. Vérifiez aussi le mode : forcer XML sur du HTML approximatif échoue avec une erreur d’analyse, tandis que le mode HTML l’analyse avec tolérance.

Les préfixes déclarés dans le document sont enregistrés automatiquement pour votre expression. Un espace de noms par défaut est lié au préfixe d, si bien que //d:item sélectionne les éléments <item> d’un document à espace de noms par défaut. Les liaisons actives sont listées avec les résultats.

Non. Le document et l’expression sont évalués par le moteur XPath de votre propre navigateur et ne sont ni envoyés à notre serveur, ni stockés, ni ajoutés à l’adresse de la page ; ils ne vivent que dans la session de ce navigateur afin que la vue en plusieurs étapes puisse afficher vos résultats.

Outils similaires