Tester XPath

Il tuo documento e la tua espressione restano in questo browser.

Incolla XML o HTML fino a 1.000.000 di caratteri. La valutazione avviene in questo browser con XPath 1.0.

XPath 1.0 assoluto o relativo. I prefissi dichiarati nel documento vengono registrati automaticamente; il namespace predefinito è disponibile con il prefisso d.

Scrivere XPath per lo scraping o per XSLT è un continuo andare a tentativi se non hai una sandbox dal vivo. Questo tester riceve il tuo XML o HTML in un pannello e la tua espressione in un altro, valuta XPath 1.0 con il motore del tuo stesso browser ed elenca ogni nodo trovato con tipo, attributi, contenuto testuale e markup serializzato. Le espressioni scalari come count(//book) restituiscono direttamente il loro valore, e i prefissi dei namespace dichiarati nel documento vengono registrati per te. Tutto gira nel tuo browser: il documento non viene mai caricato su alcun server.

Come provare un'espressione XPath

  1. 1

    Incolla XML o HTML

    Il rilevamento automatico passa all'analisi HTML tollerante quando vede un doctype o una radice HTML; puoi anche forzare la modalità XML o HTML.

  2. 2

    Inserisci il tuo XPath

    Assoluta (`/library/book`) o relativa (`//div[@class='card']`), qualsiasi espressione XPath 1.0.

  3. 3

    Valuta

    Il motore XPath del tuo browser esegue la query in locale; nulla viene inviato a un server.

  4. 4

    Ispeziona i risultati

    Ogni corrispondenza mostra il tipo di nodo, gli attributi, il testo troncato e il markup serializzato; vengono elencate fino a 200 corrispondenze.

Le basi di XPath 1.0

Espressione Cosa seleziona
/books/book I <book> figli della radice <books>
//book Ogni <book> in qualsiasi punto del documento
//book[@id='42'] I <book> con attributo id uguale a 42
//book[1] Il primo <book> di ogni genitore (non del doc.)
(//book)[1] Il primo <book> dell’intero documento
//book[title='1984'] I <book> il cui testo di <title> è “1984”
//book/@id Gli attributi id di tutti gli elementi <book>
//book[position() > 1] Tutti i <book> tranne il primo
//book[last()] L’ultimo <book> di ogni genitore

Funzionano anche le espressioni scalari: count(//book) restituisce un numero, string(//title) una stringa e boolean(//book[@id]) vero o falso. Il tester mostra quei valori direttamente invece di un elenco di nodi.

Gli assi più comuni oltre a child

  • ancestor::, tutti gli antenati
  • following-sibling::, i fratelli successivi al nodo corrente
  • preceding-sibling::, i fratelli precedenti
  • descendant::, tutti i discendenti
  • attribute:: (abbreviato @), gli attributi del nodo corrente
  • parent:: (abbreviato ..), l’elemento genitore

Particolarità dell’HTML

L’HTML non è XML rigoroso, quindi il tester lo analizza in modo tollerante con il parser HTML del tuo browser invece di quello XML rigoroso. La modalità HTML viene rilevata automaticamente da <!DOCTYPE html> o da una radice <html>, e con il selettore della modalità documento puoi forzare l’una o l’altra. In modalità HTML i nomi di tag e attributi vengono convertiti in minuscolo, quindi scrivi il tuo XPath in minuscolo: //div[@class], non //DIV[@CLASS].

Namespace

L’XML con namespace richiede la registrazione dei prefissi:

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

Il tester scorre il documento in cerca delle dichiarazioni xmlns e registra ogni prefisso automaticamente, quindi //content:encoded funziona senza altro. Un namespace predefinito (un semplice xmlns="...") non ha prefisso nel documento, perciò il tester lo associa al prefisso d: seleziona gli <item> di un feed con namespace predefinito con //d:item. I namespace registrati sono elencati accanto ai risultati.

Cosa questo tester non valuta

I browser valutano XPath 1.0, lo stesso dialetto usato dalla maggior parte degli stack di scraping. Le funzionalità di XPath 2.0 e successivi, come matches(string, regex), tokenize(string, delimiter), le espressioni for ... return e gli operatori di sequenza, non ne fanno parte; le troverai nelle toolchain XSLT 2.0/3.0. XPath 1.0 resta la scelta più portabile per il web scraping.

Consigli per i test

  • Parti in largo e restringi. Prima //div, poi //div[@class], infine il valore preciso della classe.
  • Controlla le dichiarazioni dei namespace. La maggior parte dei “perché il mio XPath non restituisce nulla?” dipende dai namespace; guarda l’elenco dei namespace registrati.
  • Occhio alle maiuscole. XML distingue maiuscole e minuscole. La modalità HTML converte i nomi in minuscolo.
  • Prova string() quando estrai testo. //p/text() e string(//p) differiscono quando c’è markup annidato.

Domande frequenti

No, solo XPath. La maggior parte dei browser supporta entrambi tramite document.querySelectorAll (CSS) e document.evaluate (XPath). Usa quello più chiaro per il compito.

L’analisi dell’HTML converte in minuscolo i nomi di tag e attributi. Assicurati che il tuo XPath usi le minuscole: //div[@class], non //DIV[@CLASS]. Controlla anche la modalità: forzare XML su HTML poco rigoroso fallisce con un errore di analisi, mentre la modalità HTML lo analizza in modo tollerante.

I prefissi dichiarati nel documento vengono registrati automaticamente per la tua espressione. Un namespace predefinito viene associato al prefisso d, quindi //d:item seleziona gli elementi <item> di un documento con namespace predefinito. Le associazioni attive sono elencate con i risultati.

No. Il documento e l’espressione vengono valutati dal motore XPath del tuo stesso browser e non vengono inviati al nostro server, memorizzati né aggiunti all’indirizzo della pagina; restano solo nella sessione di questo browser perché la vista a più passaggi possa mostrarti i risultati.

Strumenti correlati