CodeKitHub
Instrumente pentru cod

Testor XPath

Ultima actualizare:

XPath este un limbaj de interogare pentru selectarea nodurilor dintr-un document XML (sau HTML) folosind expresii de tip cale, similar modului în care o cale de fișier selectează un fișier într-un arbore de foldere. Acest instrument vă permite să lipiți orice XML, să scrieți o expresie XPath și să vedeți instantaneu ce noduri se potrivesc — inclusiv numărul de noduri, ieșirea serializată și mesaje de eroare clare pentru XML sau sintaxă XPath invalidă. Rulează în întregime în browserul dvs. folosind motorul nativ `document.evaluate`, integrat în fiecare browser modern, astfel încât nimic din ce lipiți nu este niciodată încărcat undeva.

Ce este acest instrument?

XPath (XML Path Language) este un standard W3C pentru navigarea și selectarea nodurilor — elemente, atribute, text — dintr-un document XML folosind o sintaxă compactă, asemănătoare unei căi, de exemplu `//book[price>30]/title` selectează fiecare `<title>` al cărui element frate `<price>` este mai mare decât 30, oriunde în document. Este folosit de foile de stil XSLT, instrumentele de validare XML, scraperele web, framework-urile de automatizare a browserului (Selenium, Playwright) și bibliotecile XML ale multor limbaje de programare.

Versiunea actuală implementată de fiecare browser major — Chrome, Firefox, Safari, Edge — este XPath 1.0, recomandarea W3C originală din 1999. Acest instrument folosește exact același motor nativ prin API-ul `document.evaluate()` al browserului, astfel încât rezultatele de aici corespund cu ceea ce ați obține din DevTools-ul browserului sau din orice JavaScript rulat într-un browser. Nu implementează specificațiile ulterioare XPath 2.0/3.0/3.1 (care adaugă funcții precum `for`, secvențe și potrivire cu expresii regulate) — consultați Întrebările frecvente pentru ce înseamnă asta în practică.

O expresie poate returna unul din două tipuri de rezultate: un set de noduri (zero sau mai multe elemente, atribute sau noduri de text potrivite, pe care acest instrument le serializează și le listează câte unul pe linie, împreună cu un număr), sau o valoare scalară — un număr, un șir sau o valoare booleană — atunci când expresia în sine calculează o valoare, precum `count(//book)` sau `//book[1]/title = 'Dune'`.

De ce să-l folosești?

  • Depanați o expresie XPath înainte de a o codifica rigid într-un scraper web, un test Selenium/Playwright sau o foaie de stil XSLT.
  • Verificați rapid dacă un XPath dat selectează nodul pe care îl așteptați dintr-un eșantion XML/HTML real.
  • Vedeți numărul exact de potriviri și ieșirea serializată în loc să ghiciți din cod.
  • Obțineți erori imediate și lizibile pentru XML malformat sau sintaxă XPath invalidă, în loc de o urmă de stivă criptică.
  • 100% pe partea de client: XML-ul și expresia dvs. nu părăsesc niciodată browserul.

Cum se folosește

  1. Lipiți sau editați XML-ul (sau HTML-ul) în caseta de intrare — un document eșantion pentru o librărie este precompletat pentru a putea vedea imediat cum funcționează.
  2. Introduceți o expresie XPath în câmpul de expresie sau editați exemplul precompletat.
  3. Faceți clic pe „Evaluate” (sau apăsați Enter în câmpul de expresie).
  4. Citiți nodurile potrivite mai jos, cu numărul afișat sus; rezultatele scalare (numere, șiruri, valori booleene) sunt afișate direct.
  5. Dacă XML-ul sau expresia sunt invalide, un mesaj de eroare specific înlocuiește rezultatele.

Exemplu

Intrare

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

Rezultat

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

Doar 2 din cele 3 cărți au un preț peste 30, așa că sunt returnate exact 2 elemente <title> — a treia carte (Gatsby, 12,99 $) este exclusă corect.

XPath vs. selectori CSS pe scurt

Ambele limbaje selectează noduri dintr-un document, dar rezolvă probleme diferite. Folosiți acest tabel pentru a alege instrumentul potrivit pentru o anumită selecție.

CapacitateXPathSelectori CSS
Selectare după etichetă/clasă/id, coborândDaDa — și, de obicei, mai rapid
Selectare după conținut vizibil/textDa — `contains(text(),'x')`Nu
Urcare spre un părinte/strămoșDa — `//div[span]/..`Nu (`:has()` este o excepție parțială mai nouă)
Comparații între valorile fraților (ex. `price>30`)DaNu
Funcționează în afara unui browser (unelte XML server-side, XSLT)DaNu — selectorii CSS sunt specifici browserului/DOM

Instrumente conexe

Lucrați cu formate de date structurate? Aceste instrumente se potrivesc bine cu testarea XPath.

Formator JSON · Decodor JWT

Întrebări frecvente

Pentru ce este folosit XPath?

XPath selectează noduri — elemente, atribute sau text — dintr-un document XML sau HTML folosind o sintaxă de tip cale. Este limbajul de selecție din spatele transformărilor XSLT, al multor validatoare XML, și este folosit pe scară largă în web scraping și automatizarea testelor de browser (Selenium, Playwright, Cypress) pentru a localiza elemente pe o pagină, mai ales atunci când selectorii CSS singuri nu pot exprima condiția necesară.

XPath vs. selectori CSS — pe care ar trebui să-l folosesc?

Se suprapun, dar nu sunt echivalenți. XPath poate selecta un părinte pe baza conținutului unui copil (`//div[span='Total']`), poate urca spre strămoși și poate selecta după textul vizibil (`//button[contains(text(),'Submit')]`) — selectorii CSS nu pot urca în arbore și nu pot potrivi deloc după conținutul textual. Dacă doar selectați după etichetă, clasă sau ID coborând prin document, selectorii CSS sunt mai simplu de scris și, în general, mai rapid de evaluat. Apelați la XPath în mod specific atunci când aveți nevoie de „selectează părintele acestui text” sau „selectează după ce spune elementul”, nu doar după cum este etichetat sau clasificat.

Acest instrument suportă funcțiile XPath 2.0 sau 3.0?

Nu — la fel ca niciun browser. Browserele implementează XPath 1.0 (recomandarea W3C din 1999) prin `document.evaluate()`, iar acest instrument folosește exact același motor nativ, deci este fidel cu ceea ce ați obține rulând aceeași expresie în DevTools-ul browserului sau în JavaScript. Funcțiile și caracteristicile introduse în XPath 2.0/3.0/3.1 (precum expresiile `for`, secvențele sau `matches()` cu expresii regulate) nu sunt disponibile — aici funcționează doar funcțiile 1.0, precum `contains()`, `starts-with()`, `substring()`, `count()`, `position()` și `last()`.

Care sunt câteva expresii XPath comune pe care ar trebui să le cunosc?

`//tag` selectează fiecare `<tag>` oriunde în document. `//tag[@attr='value']` selectează elementele `<tag>` al căror atribut `attr` este egal cu `value`. `//tag[contains(text(),'x')]` selectează elementele `<tag>` al căror text direct conține `x`. `//tag[1]` selectează primul frate `<tag>` din fiecare părinte. `//parent/child` selectează elementele `<child>` care sunt copii direcți ai lui `<parent>`. `count(//tag)` returnează un număr în loc de un set de noduri.

Acest instrument gestionează spațiile de nume XML?

Doar cazul obișnuit, fără spațiu de nume, este suportat corect, ceea ce acoperă marea majoritate a XML/HTML scris manual sau extras prin scraping. Dacă documentul dvs. declară un spațiu de nume XML (de ex. `xmlns="..."` pe elementul rădăcină), `document.evaluate` necesită o funcție de rezolvare conștientă de spațiile de nume care să mapeze prefixele la URI-uri, ceea ce acest instrument simplu nu configurează — expresiile aplicate pe XML cu spații de nume pot returna zero potriviri chiar dacă par corecte. Aceasta este o limitare cunoscută, nu o eroare: eliminați declarația spațiului de nume din eșantionul dvs. sau folosiți funcția local-name() ca soluție alternativă (de ex. `//*[local-name()='title']`).

XML-ul sau expresia mea XPath sunt trimise către un server?

Nu. Totul rulează local folosind `DOMParser` și `document.evaluate()` integrate în browser — același motor pe care browserul dvs. îl folosește deja intern. Nimic din ce introduceți sau lipiți nu părăsește vreodată dispozitivul dvs.

Instrumente similare