CodeKitHub
Koodityökalut

XPath-testeri

Viimeksi päivitetty:

XPath on kyselykieli, jolla valitaan solmuja XML- (tai HTML-) dokumentista polkulausekkeiden avulla — samaan tapaan kuin tiedostopolku valitsee tiedoston kansiorakenteesta. Tällä työkalulla voit liittää minkä tahansa XML-sisällön, kirjoittaa XPath-lausekkeen ja nähdä heti, mitkä solmut täsmäävät — mukaan lukien solmujen määrä, serialisoitu tuloste ja selkeät virheilmoitukset virheellisestä XML:stä tai XPath-syntaksista. Kaikki tapahtuu selaimessasi käyttäen jokaisen nykyaikaisen selaimen sisäänrakennettua `document.evaluate`-moottoria, joten mitään liittämääsi ei koskaan lähetetä minnekään.

Mikä tämä työkalu on?

XPath (XML Path Language) on W3C-standardi, jolla navigoidaan ja valitaan solmuja — elementtejä, attribuutteja, tekstiä — XML-dokumentin sisältä tiiviillä polunkaltaisella syntaksilla, esim. `//book[price>30]/title` valitsee jokaisen `<title>`-elementin, jonka sisarelementin `<price>` arvo on suurempi kuin 30, missä tahansa dokumentissa. Sitä käyttävät XSLT-tyylitiedostot, XML-validointityökalut, verkkokaapijat, selainautomaatiokehykset (Selenium, Playwright) ja monien ohjelmointikielten XML-kirjastot.

Kaikkien suurten selainten — Chrome, Firefox, Safari, Edge — nykyisin toteuttama versio on XPath 1.0, alkuperäinen vuoden 1999 W3C-suositus. Tämä työkalu käyttää juuri tätä natiivimoottoria selaimen `document.evaluate()`-rajapinnan kautta, joten tulokset vastaavat sitä, mitä saisit selaimen kehittäjätyökaluista tai mistä tahansa selaimessa ajettavasta JavaScriptistä. Se ei toteuta myöhempiä XPath 2.0/3.0/3.1 -määrityksiä (ne lisäävät mm. `for`-lausekkeita, sekvenssejä ja regex-täsmäytystä) — katso UKK, mitä tämä käytännössä tarkoittaa.

Lauseke voi palauttaa kahdenlaisia tuloksia: solmujoukon (node-set, nolla tai useampi täsmäävä elementti, attribuutti tai tekstisolmu, jotka tämä työkalu serialisoi ja listaa yksi riviä kohden määrän kera) tai skalaariarvon — luvun, merkkijonon tai totuusarvon — kun lauseke itse laskee arvon, kuten `count(//book)` tai `//book[1]/title = 'Dune'`.

Miksi käyttää sitä?

  • Debuggaa XPath-lauseke ennen kuin kovakoodaat sen verkkokaapijaan, Selenium/Playwright-testiin tai XSLT-tyylitiedostoon.
  • Tarkista nopeasti, valitseeko tietty XPath odotetun solmun oikeasta XML/HTML-näytteestä.
  • Näe tarkat osumamäärät ja serialisoitu tuloste sen sijaan, että arvailisit koodin perusteella.
  • Saat välittömiä, luettavia virheilmoituksia virheellisestä XML:stä tai virheellisestä XPath-syntaksista sekavan pinojäljen sijaan.
  • 100 % selainpohjainen: XML- ja lauseketietosi eivät koskaan poistu selaimestasi.

Käyttöohje

  1. Liitä tai muokkaa XML- (tai HTML-) sisältöäsi syötekenttään — esimerkkikirjakauppadokumentti on valmiiksi täytetty, jotta näet toiminnan heti.
  2. Kirjoita XPath-lauseke lausekekenttään tai muokkaa valmiiksi täytettyä esimerkkiä.
  3. Napsauta "Evaluate" (tai paina Enter lausekekentässä).
  4. Lue täsmäävät solmut alta, määrä näkyy yläreunassa; skalaaritulokset (luvut, merkkijonot, totuusarvot) näytetään suoraan.
  5. Jos XML tai lauseke on virheellinen, tulosten tilalle tulee tarkka virheilmoitus.

Esimerkki

Syöte

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

Tuloste

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

Vain kahden kolmesta kirjasta hinta on yli 30, joten tarkalleen 2 <title>-elementtiä palautetaan — kolmas kirja (Gatsby, 12,99 $) jää oikein pois.

XPath vs. CSS-valitsimet yhdellä silmäyksellä

Molemmat kielet valitsevat solmuja dokumentista, mutta ne ratkaisevat eri ongelmia. Käytä tätä taulukkoa valitaksesi oikean työkalun kuhunkin valintaan.

OminaisuusXPathCSS-valitsimet
Valinta tagin/luokan/id:n perusteella alaspäinKylläKyllä — ja yleensä nopeampi
Valinta näkyvän tekstisisällön perusteellaKyllä — `contains(text(),'x')`Ei
Kulku ylöspäin vanhempaan/esivanhempaanKyllä — `//div[span]/..`Ei (`:has()` on uudempi osittainen poikkeus)
Sisarusarvojen vertailu (esim. `price>30`)KylläEi
Toimii selaimen ulkopuolella (palvelinpuolen XML-työkalut, XSLT)KylläEi — CSS-valitsimet ovat selain-/DOM-kohtaisia

Aiheeseen liittyvät työkalut

Työskenteletkö rakenteisten dataformaattien parissa? Nämä työkalut sopivat hyvin yhteen XPath-testauksen kanssa.

JSON-muotoilija · JWT-purkaja

Usein kysytyt kysymykset

Mihin XPathia käytetään?

XPath valitsee solmuja — elementtejä, attribuutteja tai tekstiä — XML- tai HTML-dokumentista polkusyntaksin avulla. Se on XSLT-muunnosten taustalla oleva valintakieli, sitä käyttävät monet XML-validaattorit, ja se on laajasti käytössä verkkokaapinnassa ja selaintestiautomaatiossa (Selenium, Playwright, Cypress) elementtien paikantamiseen sivulla, erityisesti silloin kun pelkät CSS-valitsimet eivät riitä ilmaisemaan tarvittavaa ehtoa.

XPath vai CSS-valitsimet — kumpaa käyttää?

Ne menevät osittain päällekkäin, mutta eivät ole samanarvoisia. XPath pystyy valitsemaan vanhemman lapsen sisällön perusteella (`//div[span='Total']`), kulkemaan ylöspäin esivanhempiin ja valitsemaan näkyvän tekstin perusteella (`//button[contains(text(),'Submit')]`) — CSS-valitsimet eivät voi kulkea puussa ylöspäin eivätkä täsmätä tekstisisältöön lainkaan. Jos valitset vain tagin, luokan tai id:n perusteella alaspäin dokumentissa, CSS-valitsimet ovat yksinkertaisempia kirjoittaa ja yleensä nopeampia arvioida. Käytä XPathia erityisesti silloin, kun tarvitset "valitse tämän tekstin vanhempi" tai "valitse sen mukaan, mitä elementti sanoo" -tyyppisiä valintoja, et pelkästään tagin tai luokan perusteella tehtäviä.

Tukeeko tämä työkalu XPath 2.0- tai 3.0-funktioita?

Ei — eikä mikään selain tue. Selaimet toteuttavat XPath 1.0:n (vuoden 1999 W3C-suosituksen) `document.evaluate()`-rajapinnan kautta, ja tämä työkalu käyttää juuri tätä natiivimoottoria, joten se vastaa tarkasti sitä, mitä saisit ajamalla saman lausekkeen selaimen kehittäjätyökaluissa tai JavaScriptissä. XPath 2.0/3.0/3.1:ssä esitellyt funktiot ja ominaisuudet (kuten `for`-lausekkeet, sekvenssit tai regex-pohjainen `matches()`) eivät ole käytettävissä — täällä toimivat vain 1.0-funktiot kuten `contains()`, `starts-with()`, `substring()`, `count()`, `position()` ja `last()`.

Mitkä ovat yleisiä XPath-lausekkeita, jotka kannattaa osata?

`//tag` valitsee jokaisen `<tag>`-elementin dokumentissa. `//tag[@attr='value']` valitsee `<tag>`-elementit, joiden `attr`-attribuutti on `value`. `//tag[contains(text(),'x')]` valitsee `<tag>`-elementit, joiden suora teksti sisältää merkkijonon `x`. `//tag[1]` valitsee ensimmäisen `<tag>`-sisaruksen jokaisessa vanhemmassa. `//parent/child` valitsee `<child>`-elementit, jotka ovat `<parent>`-elementin suoria lapsia. `count(//tag)` palauttaa luvun solmujoukon sijaan.

Käsitteleekö tämä työkalu XML-nimiavaruuksia?

Vain tavallinen nimiavaruudeton tapaus tuetaan siististi, ja se kattaa valtaosan käsin kirjoitetusta tai kaapitusta XML/HTML-sisällöstä. Jos dokumenttisi määrittelee XML-nimiavaruuden (esim. `xmlns="..."` juurielementissä), `document.evaluate` vaatii nimiavaruustietoisen resolver-funktion, joka kuvaa etuliitteet URI:iksi — tätä ei ole rakennettu tähän yksinkertaiseen työkaluun, joten nimiavaruudellista XML:ää vasten ajetut lausekkeet voivat palauttaa nolla osumaa, vaikka ne näyttäisivät oikeilta. Tämä on tunnettu rajoitus, ei virhe: poista nimiavaruusmäärittely näytteestäsi tai käytä kiertotienä local-name()-funktiota (esim. `//*[local-name()='title']`).

Lähetetäänkö XML- tai XPath-lausekkeeni palvelimelle?

Ei. Kaikki tapahtuu paikallisesti selaimesi sisäänrakennetulla `DOMParser`- ja `document.evaluate()`-moottorilla — samalla moottorilla, jota selaimesi jo käyttää sisäisesti. Mikään kirjoittamasi tai liittämäsi ei koskaan poistu laitteeltasi.

Liittyvät työkalut