Tester XPath online

Testa espressioni XPath sul tuo XML e guarda ogni nodo trovato, con il suo percorso e la sua riga. Tutto avviene nel tuo browser, quindi il tuo XML non viene mai inviato a un server.

Il tester XPath funziona interamente nel tuo browser e ha bisogno di JavaScript. Il resto di questa pagina funziona anche senza. In alternativa: xmllint --xpath da riga di comando, oppure la libreria lxml in Python.

Prova:

Incolla del codice XML, trascina un file o carica l'esempio. I file vengono letti nel tuo browser: niente viene inviato a un server.

Risultato

XPath 1.0, valutato dal tuo browser. Mostra nell'input seleziona una corrispondenza nel tuo XML.

Qui appariranno i nodi o il valore selezionati dalla tua espressione.

Questo strumento ti è stato utile? Sostieni XMLNest

Un'espressione di esempio seleziona i titoli dei libri in francese, e «Show in input» ne evidenzia uno nell'XML. Poi //book non trova niente, perché l'XML ha un namespace predefinito: la correzione suggerita, //d:book, trova tutti e 4 i libri. (24 secondi, senza audio, interfaccia in inglese)

Come testare un'espressione XPath?

Incolla il tuo XML a sinistra, oppure trascinaci sopra un file. Scrivi un'espressione nel campo XPath e premi Invio o Valuta. Ogni nodo trovato compare con il suo tipo, un percorso breve come /catalog/book[2]/title, la sua riga e il suo contenuto. Mostra nell'input seleziona quel nodo nel tuo XML. Una funzione come count() dà invece un numero, che il risultato mostra. Copia e Scarica danno il risultato come testo semplice. Carica esempio apre un catalogo di libri da provare subito.

Perché la mia espressione non restituisce niente?

Nove volte su dieci, per colpa di un namespace. Quando l'elemento radice ha xmlns="…", ogni elemento senza prefisso appartiene a quel namespace predefinito, e un semplice //book non lo trova più. Questo tester dà un prefisso al namespace predefinito, d se non ne scegli un altro in Namespace, e suggerisce l'espressione corretta quando riconosce il problema. Altre cause frequenti: un errore di battitura in un nome, perché l'XML distingue maiuscole e minuscole, oppure una @ mancante davanti a un attributo.

Esempi di espressioni da provare

//book/title elenca tutti i titoli. //book[@lang='en'] tiene i libri il cui attributo lang vale en. count(//book) li conta, e sum(//price) somma i prezzi. //title[contains(., 'Dark')] trova i titoli che contengono una parola, e //book[last()] prende l'ultimo libro. Per selezionare l'attributo stesso, scrivi //book/@id. Il test text() restituisce nodi di testo, mentre string() restituisce il testo completo di un elemento.

Quale versione di XPath supporta questo valutatore?

XPath 1.0, la versione integrata in tutti i browser, con le sue 27 funzioni. XPath 2.0 e 3.1 non sono supportati, quindi lower-case(), matches() o if … then … else danno un messaggio chiaro, spesso con un'alternativa in 1.0. Le stesse espressioni funzionano in un foglio di stile XSLT 1.0: provale nel tester XSLT. Se il tuo XML ha un errore di sintassi, il tester ne mostra prima la riga, come fa il validatore XML.

Questo strumento invia il mio XML a un server?

No. L'espressione viene valutata in questa scheda del browser, e le regole di sicurezza della pagina bloccano le richieste di rete. Non viene salvato nulla: chiudi la scheda e il tuo XML sparisce. Per rendere prima leggibile un lungo file su una sola riga, usa il formattatore XML.

Domande

Perché //book non trova niente se il mio XML ha elementi book?

Probabilmente il tuo XML ha un namespace predefinito, scritto xmlns="…" sulla radice. In XPath 1.0, un nome senza prefisso trova solo elementi senza namespace. Questo tester dà al namespace predefinito un prefisso, d se non lo cambi, quindi scrivi //d:book.

Posso usare funzioni di XPath 2.0 o 3.1?

No. I browser includono XPath 1.0, e questo tester usa il motore del browser. Funzioni come lower-case() o matches() restituiscono un messaggio chiaro, spesso con un modo per ottenere lo stesso risultato in XPath 1.0.

Che differenza c'è tra text() e string()?

text() seleziona i nodi di testo che si trovano direttamente dentro un elemento, quindi ottieni dei nodi. string() restituisce il testo dell'intero elemento, figli compresi, come un unico valore.

Come conto o filtro i nodi?

count(//item) dà un numero. //item[contains(@name, 'pro')] tiene gli item il cui name contiene pro. //item[position() <= 3] tiene i primi tre, e //item[last()] l'ultimo.

Quanto può essere grande il mio XML?

Fino a 10 MB. L'elenco mostra le prime 500 corrispondenze, e Copia o Scarica le danno tutte come testo semplice.

Il mio XML viene inviato da qualche parte?

No. L'espressione viene eseguita in questa scheda del browser, e la pagina non ha il permesso di inviare richieste di rete. Chiudi la scheda e il tuo XML sparisce.