CodeKitHub
Kód eszközök

XPath tesztelő

Utolsó frissítés:

Az XPath egy lekérdezőnyelv, amellyel csomópontokat lehet kiválasztani egy XML (vagy HTML) dokumentumból útvonal-kifejezések segítségével, hasonlóan ahhoz, ahogy egy fájlútvonal kiválaszt egy fájlt egy mappastruktúrában. Ezzel az eszközzel bármilyen XML-t beilleszthet, XPath kifejezést írhat, és azonnal láthatja, mely csomópontok illeszkednek — beleértve a csomópontok számát, a szerializált kimenetet, valamint a hibás XML-re vagy hibás XPath-szintaxisra vonatkozó egyértelmű hibaüzeneteket. Az eszköz teljes egészében a böngészőjében fut, minden modern böngészőbe beépített natív `document.evaluate` motort használva, így amit beilleszt, sehova sem kerül feltöltésre.

Mi ez az eszköz?

Az XPath (XML Path Language) egy W3C szabvány csomópontok — elemek, attribútumok, szöveg — navigálására és kiválasztására egy XML dokumentumon belül, tömör, útvonalszerű szintaxis segítségével, például a `//book[price>30]/title` minden olyan `<title>` elemet kiválaszt, amelynek testvér `<price>` eleme nagyobb 30-nál, bárhol a dokumentumban. XSLT stíluslapok, XML-ellenőrző eszközök, webes lekaparó eszközök, böngésző-automatizálási keretrendszerek (Selenium, Playwright) és számos programozási nyelv XML-könyvtára használja.

A jelenlegi verzió, amelyet minden nagyobb böngésző — Chrome, Firefox, Safari, Edge — implementál, az XPath 1.0, az eredeti, 1999-es W3C ajánlás. Ez az eszköz pontosan ezt a natív motort használja a böngésző `document.evaluate()` API-ján keresztül, így az itt kapott eredmények megegyeznek azzal, amit a böngésző fejlesztői eszközeiben vagy bármilyen, böngészőben futó JavaScript kódban kapna. Nem valósítja meg a későbbi XPath 2.0/3.0/3.1 specifikációkat (ezek olyan függvényeket adnak hozzá, mint a `for`, szekvenciák és regex illesztés) — a gyakorlati jelentésről lásd a GYIK-et.

Egy kifejezés kétféle eredményt adhat vissza: csomóponthalmazt (node-set — nulla vagy több illeszkedő elem, attribútum vagy szövegcsomópont, amelyeket ez az eszköz szerializál és soronként egyet listáz, számmal együtt), vagy skaláris értéket — számot, karakterláncot vagy logikai értéket — amikor maga a kifejezés egy értéket számít ki, mint a `count(//book)` vagy a `//book[1]/title = 'Dune'`.

Miért érdemes használni?

  • Hibakeresés egy XPath kifejezésben, mielőtt beépítené egy webes lekaparó eszközbe, Selenium/Playwright tesztbe vagy XSLT stíluslapba.
  • Gyorsan ellenőrizze, hogy egy adott XPath valóban a várt csomópontot választja-e ki egy valós XML/HTML mintából.
  • Pontos találati számokat és szerializált kimenetet lásson, ahelyett hogy a kódból kellene találgatnia.
  • Azonnali, olvasható hibaüzeneteket kapjon hibás XML vagy érvénytelen XPath szintaxis esetén, kriptikus stack trace helyett.
  • 100%-ban kliensoldali: az Ön XML-je és kifejezése soha nem hagyja el a böngészőjét.

Használati útmutató

  1. Illessze be vagy szerkessze az XML-t (vagy HTML-t) a beviteli mezőben — egy minta könyvesbolt-dokumentum előre ki van töltve, hogy azonnal láthassa működés közben.
  2. Írjon be egy XPath kifejezést a kifejezésmezőbe, vagy szerkessze az előre kitöltött példát.
  3. Kattintson az „Evaluate” gombra (vagy nyomjon Entert a kifejezésmezőben).
  4. Olvassa el az alább megjelenő illeszkedő csomópontokat, a tetején látható számmal; a skaláris eredmények (számok, karakterláncok, logikai értékek) közvetlenül megjelennek.
  5. Ha az XML vagy a kifejezés érvénytelen, egy konkrét hibaüzenet váltja fel az eredményeket.

Példa

Bemenet

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

Kimenet

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

A 3 könyv közül csak 2 ára haladja meg a 30-at, így pontosan 2 <title> elem kerül visszaadásra — a harmadik könyv (Gatsby, 12,99 $) helyesen kimarad.

XPath és CSS szelektorok összehasonlítva

Mindkét nyelv csomópontokat választ ki egy dokumentumból, de eltérő problémákat oldanak meg. Használja ezt a táblázatot a megfelelő eszköz kiválasztásához egy adott feladathoz.

KépességXPathCSS szelektorok
Kiválasztás címke/osztály/azonosító alapján lefeléIgenIgen — és általában gyorsabb
Kiválasztás látható/szöveges tartalom alapjánIgen — `contains(text(),'x')`Nem
Felfelé haladás a szülőhöz/őshözIgen — `//div[span]/..`Nem (a `:has()` egy újabb, részleges kivétel)
Testvérérték-összehasonlítás (pl. `price>30`)IgenNem
Böngészőn kívül is működik (szerveroldali XML eszközök, XSLT)IgenNem — a CSS szelektorok böngésző-/DOM-specifikusak

Kapcsolódó eszközök

Strukturált adatformátumokkal dolgozik? Ezek az eszközök jól kiegészítik az XPath tesztelést.

JSON formázó · JWT dekódoló

Gyakori kérdések

Mire használható az XPath?

Az XPath csomópontokat — elemeket, attribútumokat vagy szöveget — választ ki egy XML vagy HTML dokumentumból útvonal-szintaxis segítségével. Ez a kiválasztási nyelv áll az XSLT transzformációk és sok XML-ellenőrző eszköz mögött, és széles körben használják webes lekaparásban és böngésző-tesztautomatizálásban (Selenium, Playwright, Cypress) elemek megkeresésére egy oldalon, különösen akkor, amikor önmagukban a CSS szelektorok nem tudják kifejezni a szükséges feltételt.

XPath vagy CSS szelektorok — melyiket használjam?

Részben átfedik egymást, de nem egyenértékűek. Az XPath ki tud választani egy szülőt egy gyermek tartalma alapján (`//div[span='Total']`), fel tud menni az ősökhöz, és látható szöveg alapján is tud választani (`//button[contains(text(),'Submit')]`) — a CSS szelektorok nem tudnak felfelé menni a fában, és egyáltalán nem tudnak szövegtartalom alapján illeszkedni. Ha csak címke, osztály vagy azonosító alapján választ, lefelé haladva a dokumentumban, a CSS szelektorok egyszerűbben írhatók és általában gyorsabban kiértékelhetők. Kifejezetten akkor nyúljon XPath-hoz, amikor „válaszd ki ennek a szövegnek a szülőjét” vagy „válassz aszerint, mit mond az elem” típusú műveletre van szüksége, nem csak arra, hogy mi a címkéje vagy osztálya.

Támogatja ez az eszköz az XPath 2.0 vagy 3.0 függvényeket?

Nem — ahogy egyetlen böngésző sem. A böngészők az XPath 1.0-t (az 1999-es W3C ajánlást) valósítják meg a `document.evaluate()` révén, és ez az eszköz pontosan ezt a natív motort használja, így pontosan azt adja vissza, amit ugyanannak a kifejezésnek a böngésző fejlesztői eszközeiben vagy JavaScriptben történő futtatásakor kapna. Az XPath 2.0/3.0/3.1-ben bevezetett függvények és funkciók (mint a `for` kifejezések, szekvenciák vagy a regexet használó `matches()`) nem érhetők el — itt csak az 1.0-s függvények, például a `contains()`, `starts-with()`, `substring()`, `count()`, `position()` és `last()` működnek.

Melyek azok a gyakori XPath kifejezések, amelyeket érdemes ismerni?

A `//tag` minden `<tag>` elemet kiválaszt a dokumentumban, bárhol. A `//tag[@attr='value']` azokat a `<tag>` elemeket választja ki, amelyek `attr` attribútuma egyenlő `value`-val. A `//tag[contains(text(),'x')]` azokat a `<tag>` elemeket választja ki, amelyek közvetlen szövege tartalmazza az `x`-et. A `//tag[1]` minden szülőn belül az első `<tag>` testvérelemet választja ki. A `//parent/child` azokat a `<child>` elemeket választja ki, amelyek közvetlenül a `<parent>` gyermekei. A `count(//tag)` számot ad vissza csomóponthalmaz helyett.

Kezeli ez az eszköz az XML névtereket?

Csak a gyakori, névtér nélküli eset támogatott zökkenőmentesen, ami a kézzel írt vagy lekapart XML/HTML tartalmak túlnyomó többségét lefedi. Ha a dokumentum XML névteret deklarál (pl. `xmlns="..."` a gyökérelemen), a `document.evaluate` egy névtér-tudatos resolver függvényt igényel, amely előtagokat URI-khez rendel, ezt pedig ez az egyszerű eszköz nem állítja be — a névterekkel rendelkező XML-re futtatott kifejezések nulla találatot adhatnak vissza akkor is, ha helyesnek tűnnek. Ez ismert korlátozás, nem hiba: távolítsa el a névtér-deklarációt a mintájából, vagy megoldásként használja a local-name() függvényt (pl. `//*[local-name()='title']`).

Elküldi az eszköz az XML-emet vagy XPath kifejezésemet egy szerverre?

Nem. Minden helyileg fut, a böngésző beépített `DOMParser` és `document.evaluate()` motorját használva — ugyanazt a motort, amelyet a böngészője már belsőleg is használ. Amit beír vagy beilleszt, soha nem hagyja el az eszközét.

Kapcsolódó eszközök