Hvað er þetta verkfæri?
XPath (XML Path Language) er W3C-staðall til að vafra um og velja hnúta — stök, eigindi, texta — innan XML-skjals með þjöppuðu, slóðarlíku málkerfi, t.d. `//book[price>30]/title` velur hvert `<title>` sem systkinastakið `<price>` er hærra en 30 hjá, hvar sem er í skjalinu. Það er notað af XSLT-stílsniðum, XML-staðfestingartólum, vefskröpurum, sjálfvirknikerfum fyrir vafra (Selenium, Playwright) og XML-söfnum margra forritunarmála.
Núverandi útgáfan sem allir helstu vafrar — Chrome, Firefox, Safari, Edge — útfæra er XPath 1.0, upprunalega W3C-tilmælin frá 1999. Þetta tól notar nákvæmlega þá innfæddu vél með `document.evaluate()`-viðmóti vafrans, svo niðurstöðurnar hér samsvara því sem þú fengir úr þróunartólum vafrans eða hvaða JavaScript-kóða sem er sem keyrir í vafra. Það útfærir ekki síðari XPath 2.0/3.0/3.1-forskriftirnar (þær bæta við aðgerðum eins og `for`, runum og regex-samsvörun) — sjá algengar spurningar um hvað það þýðir í reynd.
Segð getur skilað einni af tveimur tegundum niðurstaðna: hnútamengi (node-set — núll eða fleiri samsvarandi stök, eigindi eða textahnútar, sem þetta tól raðgreinir og birtir eina línu í senn með fjölda), eða stakri (scalar) gildi — tölu, streng eða sanngildi — þegar segðin sjálf reiknar út gildi, eins og `count(//book)` eða `//book[1]/title = 'Dune'`.
Af hverju að nota það?
- Villuleitaðu XPath-segð áður en þú harðkóðar hana inn í vefskröpara, Selenium/Playwright-próf eða XSLT-stílsnið.
- Athugaðu fljótt hvort tiltekin XPath-segð velji hnútinn sem þú átt von á úr raunverulegu XML/HTML-sýnishorni.
- Sjáðu nákvæman fjölda samsvarana og raðgreint úttak í stað þess að giska út frá kóða.
- Fáðu tafarlaus, læsileg villuskilaboð fyrir gallað XML eða ógilda XPath-málfræði í stað dularfulls stakkspors.
- Keyrir 100% í vafranum: XML-ið þitt og segðin yfirgefa aldrei vafrann þinn.
Hvernig á að nota það
- Límdu inn eða breyttu XML-inu (eða HTML) þínu í innsláttarreitinn — dæmi um bókabúðarskjal er forútfyllt svo þú getir séð það virka strax.
- Skrifaðu XPath-segð í segðarreitinn, eða breyttu forútfyllta dæminu.
- Smelltu á „Evaluate“ (eða ýttu á Enter í segðarreitnum).
- Lestu samsvarandi hnúta hér að neðan, með fjölda efst; stakar niðurstöður (tölur, strengir, sanngildi) eru sýndar beint.
- Ef XML-ið eða segðin er ógild, kemur nákvæm villuskilaboð í stað niðurstaðnanna.
Dæmi
Inntak
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Úttak
✓ 2 node(s) matched
<title>Learning XPath</title>
<title>Dune</title>Aðeins 2 af 3 bókum eru með verð yfir 30, svo nákvæmlega 2 <title>-stök eru skilað — þriðju bókinni (Gatsby, 12,99 $) er réttilega sleppt.
XPath og CSS-veljarar í hnotskurn
Bæði málin velja hnúta úr skjali, en þau leysa ólík vandamál. Notaðu þessa töflu til að velja rétt tól fyrir tiltekið val.
| Eiginleiki | XPath | CSS-veljarar |
|---|---|---|
| Val eftir tagi/klasa/auðkenni niður á við | Já | Já — og yfirleitt fljótlegra |
| Val eftir sýnilegu/textainnihaldi | Já — `contains(text(),'x')` | Nei |
| Ferðast upp á við til foreldris/forföður | Já — `//div[span]/..` | Nei (`:has()` er nýrri, að hluta undantekning) |
| Samanburður á gildum systkina (t.d. `price>30`) | Já | Nei |
| Virkar utan vafra (XML-tól á netþjónahlið, XSLT) | Já | Nei — CSS-veljarar eru sértækir fyrir vafra/DOM |
Tengd tól
Ertu að vinna með skipulögð gagnasnið? Þessi tól passa vel með XPath-prófunum.
→
Algengar spurningar
Til hvers er XPath notað?
XPath velur hnúta — stök, eigindi eða texta — úr XML eða HTML skjali með slóðarmálkerfi. Það er valmálið á bak við XSLT-umbreytingar, mörg XML-staðfestingartól, og er mikið notað í vefskröpun og sjálfvirkri vafraprófun (Selenium, Playwright, Cypress) til að staðsetja stök á síðu, sérstaklega þegar CSS-veljarar einir og sér geta ekki tjáð nauðsynlegt skilyrði.
XPath eða CSS-veljarar — hvort ætti ég að nota?
Þeir skarast en eru ekki jafngildir. XPath getur valið foreldri út frá innihaldi barns (`//div[span='Total']`), farið upp á við til forfeðra og valið eftir sýnilegum texta (`//button[contains(text(),'Submit')]`) — CSS-veljarar geta ekki farið upp á við í trénu og geta alls ekki samsvarað textainnihaldi. Ef þú ert einfaldlega að velja eftir tagi, klasa eða auðkenni niður eftir skjalinu, eru CSS-veljarar einfaldari í ritun og yfirleitt fljótlegri í mat. Gríptu sérstaklega til XPath þegar þú þarft „veldu foreldri þessa texta“ eða „veldu eftir því sem stakið segir“, ekki bara eftir tagi eða klasa þess.
Styður þetta tól XPath 2.0 eða 3.0 aðgerðir?
Nei — og enginn vafri gerir það heldur. Vafrar útfæra XPath 1.0 (W3C-tilmælin frá 1999) í gegnum `document.evaluate()`, og þetta tól notar nákvæmlega þá innfæddu vél, svo það er nákvæmt miðað við það sem þú fengir með því að keyra sömu segð í þróunartólum vafrans eða í JavaScript. Aðgerðir og eiginleikar sem kynntir voru í XPath 2.0/3.0/3.1 (eins og `for`-segðir, runur eða `matches()` með regex) eru ekki í boði — hér virka aðeins 1.0-aðgerðir eins og `contains()`, `starts-with()`, `substring()`, `count()`, `position()` og `last()`.
Hverjar eru nokkrar algengar XPath-segðir sem ég ætti að kunna?
`//tag` velur hvert `<tag>` hvar sem er í skjalinu. `//tag[@attr='value']` velur `<tag>`-stök þar sem eigindið `attr` er jafnt og `value`. `//tag[contains(text(),'x')]` velur `<tag>`-stök þar sem beinn texti inniheldur `x`. `//tag[1]` velur fyrsta `<tag>`-systkinið í hverju foreldri. `//parent/child` velur `<child>`-stök sem eru bein börn `<parent>`. `count(//tag)` skilar tölu í stað hnútamengis.
Vinnur þetta tól með XML nafnrými?
Aðeins hið algenga tilvik án nafnrýmis er stutt með snyrtilegum hætti, sem nær yfir langflest handskrifuð eða skröpuð XML/HTML skjöl. Ef skjalið þitt tilgreinir XML-nafnrými (t.d. `xmlns="..."` á rótarstakinu), krefst `document.evaluate` nafnrýmismeðvitaðrar leysifalls sem varpar forskeytum á URI, sem þetta einfalda tól setur ekki upp — segðir gagnvart XML með nafnrými geta skilað núll samsvörunum jafnvel þótt þær virðist réttar. Þetta er þekkt takmörkun, ekki galli: fjarlægðu nafnrýmisyfirlýsinguna úr sýnishorninu þínu, eða notaðu local-name()-aðgerðina sem lausn (t.d. `//*[local-name()='title']`).
Er XML-ið mitt eða XPath-segðin send á netþjón?
Nei. Allt keyrir staðbundið með innbyggðu `DOMParser` og `document.evaluate()` vafrans þíns — sömu vél og vafrinn þinn notar nú þegar innbyrðis. Ekkert sem þú skrifar eða límir inn yfirgefur nokkurn tímann tækið þitt.