CodeKitHub
Strumenti per il codice

Tester XPath

Ultimo aggiornamento:

XPath è un linguaggio di interrogazione per selezionare nodi da un documento XML (o HTML) tramite espressioni di percorso, in modo simile a come un percorso di file individua un file all'interno di una struttura di cartelle. Questo strumento ti permette di incollare qualsiasi XML, scrivere un'espressione XPath e vedere all'istante quali nodi corrispondono, incluso il conteggio dei nodi, l'output serializzato e messaggi di errore chiari in caso di XML o sintassi XPath non validi. Funziona interamente nel tuo browser grazie al motore nativo `document.evaluate` integrato in ogni browser moderno, quindi nulla di ciò che incolli viene mai caricato altrove.

Che cos'è questo strumento?

XPath (XML Path Language) è uno standard del W3C per navigare e selezionare nodi — elementi, attributi, testo — all'interno di un documento XML tramite una sintassi compatta simile a un percorso, ad esempio `//book[price>30]/title` seleziona ogni `<title>` il cui `<price>` fratello sia maggiore di 30, ovunque nel documento. Viene usato dai fogli di stile XSLT, dagli strumenti di validazione XML, dagli scraper web, dai framework di automazione del browser (Selenium, Playwright) e dalle librerie XML di molti linguaggi di programmazione.

La versione attuale implementata da tutti i principali browser — Chrome, Firefox, Safari, Edge — è XPath 1.0, la Raccomandazione W3C originale del 1999. Questo strumento usa esattamente quel motore nativo tramite l'API `document.evaluate()` del browser, quindi i risultati qui corrispondono a quelli che otterresti dagli strumenti per sviluppatori del browser o da qualsiasi JavaScript eseguito in un browser. Non implementa le specifiche successive XPath 2.0/3.0/3.1 (che aggiungono funzionalità come espressioni `for`, sequenze e corrispondenze con espressioni regolari): consulta le FAQ per capire cosa significa in pratica.

Un'espressione può restituire uno di due tipi di risultato: un insieme di nodi (node-set — zero o più elementi, attributi o nodi di testo corrispondenti, che questo strumento serializza ed elenca uno per riga insieme a un conteggio), oppure un valore scalare — un numero, una stringa o un booleano — quando l'espressione stessa calcola un valore, come `count(//book)` o `//book[1]/title = 'Dune'`.

Perché usarlo?

  • Eseguire il debug di un'espressione XPath prima di inserirla in modo definitivo in uno scraper web, in un test Selenium/Playwright o in un foglio di stile XSLT.
  • Verificare rapidamente se una determinata espressione XPath seleziona il nodo atteso su un campione reale di XML/HTML.
  • Consultare conteggi di corrispondenze esatti e output serializzato invece di procedere per tentativi guardando il codice.
  • Ottenere errori immediati e comprensibili in caso di XML malformato o sintassi XPath non valida, invece di uno stack trace criptico.
  • 100% lato client: il tuo XML e la tua espressione non lasciano mai il browser.

Come si usa

  1. Incolla o modifica il tuo XML (o HTML) nel campo di input: un documento di esempio di una libreria è già precompilato così puoi vedere subito lo strumento in azione.
  2. Digita un'espressione XPath nel campo dedicato, oppure modifica l'esempio già precompilato.
  3. Clicca su "Valuta" (oppure premi Invio nel campo dell'espressione).
  4. Leggi i nodi corrispondenti mostrati sotto, con il conteggio in alto; i risultati scalari (numeri, stringhe, booleani) vengono mostrati direttamente.
  5. Se l'XML o l'espressione non sono validi, un messaggio di errore specifico sostituisce i risultati.

Esempio

Input

XML:
<bookstore>
  <book><title>The Great Gatsby</title><price>12.99</price></book>
  <book><title>Learning XPath</title><price>34.50</price></book>
  <book><title>Dune</title><price>45.00</price></book>
</bookstore>

XPath: //book[price>30]/title

Risultato

✓ 2 node(s) matched
<title>Learning XPath</title>
<title>Dune</title>

Solo 2 dei 3 libri hanno un prezzo superiore a 30, quindi vengono restituiti esattamente 2 elementi <title>: il terzo libro (Gatsby, 12,99 $) viene correttamente escluso.

XPath e selettori CSS a confronto

Entrambi i linguaggi selezionano nodi da un documento, ma risolvono problemi diversi. Usa questa tabella per scegliere lo strumento giusto per una determinata selezione.

CapacitàXPathSelettori CSS
Selezione per tag/classe/id scendendo nel documentoSì, e di solito più veloce
Selezione per contenuto visibile/testualeSì — `contains(text(),'x')`No
Risalita verso un genitore/antenatoSì — `//div[span]/..`No (`:has()` è un'eccezione parziale più recente)
Confronti tra valori di elementi fratelli (es. `price>30`)No
Funziona fuori dal browser (strumenti XML lato server, XSLT)No — i selettori CSS sono specifici del browser/DOM

Strumenti correlati

Lavori con formati di dati strutturati? Questi strumenti si abbinano bene ai test XPath.

Formattatore JSON · Decodificatore JWT

Domande frequenti

A cosa serve XPath?

XPath seleziona nodi — elementi, attributi o testo — da un documento XML o HTML usando una sintassi basata su percorsi. È il linguaggio di selezione alla base delle trasformazioni XSLT e di molti validatori XML, ed è ampiamente usato nel web scraping e nell'automazione dei test del browser (Selenium, Playwright, Cypress) per individuare elementi in una pagina, soprattutto quando i selettori CSS da soli non riescono a esprimere la condizione necessaria.

XPath o selettori CSS: quale usare?

Si sovrappongono ma non sono equivalenti. XPath può selezionare un elemento padre in base al contenuto di un figlio (`//div[span='Total']`), risalire verso gli antenati e selezionare in base al testo visibile (`//button[contains(text(),'Submit')]`) — i selettori CSS non possono risalire nell'albero né corrispondere in alcun modo al contenuto testuale. Se stai semplicemente selezionando per tag, classe o ID scendendo nel documento, i selettori CSS sono più semplici da scrivere e in genere più veloci da valutare. Ricorri a XPath in particolare quando ti serve "selezionare il genitore di questo testo" oppure "selezionare in base a cosa dice l'elemento", non solo in base a come è taggato o classificato.

Questo strumento supporta le funzioni di XPath 2.0 o 3.0?

No — e non lo fa nessun browser. I browser implementano XPath 1.0 (la Raccomandazione W3C del 1999) tramite `document.evaluate()`, e questo strumento usa esattamente quel motore nativo, quindi è fedele a ciò che otterresti eseguendo la stessa espressione negli strumenti per sviluppatori del browser o in JavaScript. Le funzioni e le funzionalità introdotte in XPath 2.0/3.0/3.1 (come le espressioni `for`, le sequenze o `matches()` con le regex) non sono disponibili: qui funzionano solo le funzioni della versione 1.0, come `contains()`, `starts-with()`, `substring()`, `count()`, `position()` e `last()`.

Quali sono alcune espressioni XPath comuni che dovrei conoscere?

`//tag` seleziona ogni `<tag>` presente nel documento. `//tag[@attr='value']` seleziona gli elementi `<tag>` il cui attributo `attr` è uguale a `value`. `//tag[contains(text(),'x')]` seleziona gli elementi `<tag>` il cui testo diretto contiene `x`. `//tag[1]` seleziona il primo `<tag>` fratello all'interno di ciascun genitore. `//parent/child` seleziona gli elementi `<child>` che sono figli diretti di `<parent>`. `count(//tag)` restituisce un numero invece di un insieme di nodi.

Questo strumento gestisce i namespace XML?

Viene gestito correttamente solo il caso comune senza namespace, che copre la stragrande maggioranza dell'XML/HTML scritto a mano o ottenuto tramite scraping. Se il tuo documento dichiara un namespace XML (ad esempio `xmlns="..."` sull'elemento radice), `document.evaluate` richiede una funzione di risoluzione consapevole dei namespace che associ i prefissi agli URI, cosa che questo semplice strumento non configura: le espressioni su XML con namespace possono quindi restituire zero corrispondenze anche quando sembrano corrette. Si tratta di un limite noto, non di un bug: rimuovi la dichiarazione del namespace dal tuo campione, oppure usa la funzione local-name() (ad esempio `//*[local-name()='title']`) come soluzione alternativa.

Il mio XML o la mia espressione XPath vengono inviati a un server?

No. Tutto viene eseguito localmente usando il `DOMParser` e il `document.evaluate()` integrati nel browser — lo stesso motore che il tuo browser usa già internamente. Nulla di ciò che digiti o incolli lascia mai il tuo dispositivo.

Strumenti correlati