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.