Kas ir šis rīks?
XPath (XML Path Language) ir W3C standarts mezglu — elementu, atribūtu, teksta — navigācijai un atlasei XML dokumentā, izmantojot kompaktu, ceļam līdzīgu sintaksi, piemēram, `//book[price>30]/title` atlasa katru `<title>`, kura māsas elements `<price>` ir lielāks par 30, jebkurā dokumenta vietā. To izmanto XSLT stilu lapas, XML validācijas rīki, tīmekļa datu ieguves (scraping) rīki, pārlūka automatizācijas ietvari (Selenium, Playwright) un daudzu programmēšanas valodu XML bibliotēkas.
Pašreizējā versija, ko īsteno visi galvenie pārlūki — Chrome, Firefox, Safari, Edge — ir XPath 1.0, oriģinālā 1999. gada W3C rekomendācija. Šis rīks izmanto tieši šo pašu natīvo dzinēju caur pārlūka `document.evaluate()` API, tāpēc rezultāti šeit sakrīt ar to, ko iegūtu no pārlūka DevTools vai jebkura JavaScript koda, kas darbojas pārlūkā. Tas neīsteno vēlākās XPath 2.0/3.0/3.1 specifikācijas (tās pievieno tādas funkcijas kā `for`, sekvences un atbilstību ar regulārajām izteiksmēm) — skatiet BUJ, ko tas praktiski nozīmē.
Izteiksme var atgriezt vienu no diviem rezultātu veidiem: mezglu kopu (nulle vai vairāk atbilstošu elementu, atribūtu vai teksta mezglu, ko šis rīks serializē un uzskaita pa vienam rindā kopā ar skaitu), vai skalāru vērtību — skaitli, virkni vai bulevu vērtību —, kad pati izteiksme aprēķina vērtību, piemēram, `count(//book)` vai `//book[1]/title = 'Dune'`.
Kāpēc to izmantot?
- Atkļūdojiet XPath izteiksmi, pirms to iestrādājat tīmekļa datu ieguves rīkā, Selenium/Playwright testā vai XSLT stilu lapā.
- Ātri pārbaudiet, vai konkrēta XPath izteiksme atlasa gaidīto mezglu no reāla XML/HTML parauga.
- Redziet precīzu atbilstību skaitu un serializētu izvadi, nevis minot pēc koda.
- Saņemiet tūlītējas, saprotamas kļūdas par nederīgu XML vai nederīgu XPath sintaksi, nevis nesaprotamu kļūdu steku.
- 100% klienta pusē: jūsu XML un izteiksme nekad nepamet jūsu pārlūku.
Kā to lietot
- Ielīmējiet vai rediģējiet savu XML (vai HTML) ievades laukā — grāmatnīcas parauga dokuments ir jau iepriekš aizpildīts, lai varētu uzreiz redzēt, kā tas darbojas.
- Ierakstiet XPath izteiksmi izteiksmes laukā vai rediģējiet jau iepriekš aizpildīto piemēru.
- Noklikšķiniet uz "Novērtēt" (vai nospiediet Enter izteiksmes laukā).
- Izlasiet atbilstošos mezglus zemāk, ar skaitu augšpusē; skalāri rezultāti (skaitļi, virknes, bulevu vērtības) tiek parādīti tieši.
- Ja XML vai izteiksme ir nederīga, rezultātu vietā parādās konkrēts kļūdas ziņojums.
Piemērs
Ievade
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]/titleIzvade
✓ 2 node(s) matched
<title>Learning XPath</title>
<title>Dune</title>Tikai 2 no 3 grāmatām cena pārsniedz 30, tāpēc tiek atgriezti tieši 2 <title> elementi — trešā grāmata (Gatsby, 12,99 $) korekti tiek izslēgta.
XPath un CSS selektori vienā skatā
Abas valodas atlasa mezglus no dokumenta, taču tās risina dažādas problēmas. Izmantojiet šo tabulu, lai izvēlētos pareizo rīku konkrētai atlasei.
| Iespēja | XPath | CSS selektori |
|---|---|---|
| Atlase pēc tagas/klases/id, virzoties lejup | Jā | Jā — un parasti ātrāk |
| Atlase pēc redzamā/teksta satura | Jā — `contains(text(),'x')` | Nē |
| Pārvietošanās augšup līdz vecākam/priekštecim | Jā — `//div[span]/..` | Nē (`:has()` ir jaunāks daļējs izņēmums) |
| Māsas vērtību salīdzinājumi (piem., `price>30`) | Jā | Nē |
| Darbojas ārpus pārlūka (servera XML rīki, XSLT) | Jā | Nē — CSS selektori ir specifiski pārlūkam/DOM |
Saistīti rīki
Strādājat ar strukturētu datu formātiem? Šie rīki labi papildina XPath testēšanu.
Biežāk uzdotie jautājumi
Kam tiek izmantots XPath?
XPath atlasa mezglus — elementus, atribūtus vai tekstu — no XML vai HTML dokumenta, izmantojot ceļa sintaksi. Tā ir atlases valoda, kas ir pamatā XSLT transformācijām, daudziem XML validatoriem, un to plaši izmanto tīmekļa datu ieguvē un pārlūka testu automatizācijā (Selenium, Playwright, Cypress), lai atrastu elementus lapā, it īpaši, ja ar CSS selektoriem vien nevar izteikt nepieciešamo nosacījumu.
XPath vai CSS selektori — ko izmantot?
Tie pārklājas, bet nav ekvivalenti. XPath var atlasīt vecāku, pamatojoties uz pēcteča saturu (`//div[span='Total']`), pārvietoties augšup līdz priekštečiem un atlasīt pēc redzamā teksta (`//button[contains(text(),'Submit')]`) — CSS selektori nevar pārvietoties augšup kokā un vispār nevar atbilst pēc teksta satura. Ja jūs vienkārši atlasāt pēc tagas, klases vai ID, virzoties lejup pa dokumentu, CSS selektorus ir vienkāršāk uzrakstīt, un tie parasti tiek novērtēti ātrāk. Izmantojiet XPath tieši tad, kad jums nepieciešams "atlasīt šī teksta vecāku" vai "atlasīt pēc tā, ko elements saka", nevis tikai pēc tā, kā tas ir apzīmēts vai klasificēts.
Vai šis rīks atbalsta XPath 2.0 vai 3.0 funkcijas?
Nē — tāpat kā neviens pārlūks. Pārlūki īsteno XPath 1.0 (1999. gada W3C rekomendāciju) caur `document.evaluate()`, un šis rīks izmanto tieši šo pašu natīvo dzinēju, tāpēc tas precīzi atbilst tam, ko iegūtu, izpildot to pašu izteiksmi pārlūka DevTools vai JavaScript. Funkcijas un iespējas, kas ieviestas XPath 2.0/3.0/3.1 (piemēram, `for` izteiksmes, sekvences vai `matches()` ar regulārajām izteiksmēm), nav pieejamas — šeit darbojas tikai 1.0 funkcijas, piemēram, `contains()`, `starts-with()`, `substring()`, `count()`, `position()` un `last()`.
Kādas bieži lietotas XPath izteiksmes man jāzina?
`//tag` atlasa katru `<tag>` jebkurā dokumenta vietā. `//tag[@attr='value']` atlasa `<tag>` elementus, kuru atribūts `attr` ir vienāds ar `value`. `//tag[contains(text(),'x')]` atlasa `<tag>` elementus, kuru tiešais teksts satur `x`. `//tag[1]` atlasa pirmo `<tag>` māsas elementu katrā vecākā. `//parent/child` atlasa `<child>` elementus, kas ir tiešie `<parent>` pēcteči. `count(//tag)` atgriež skaitli, nevis mezglu kopu.
Vai šis rīks apstrādā XML nosaukumvietas?
Tīri tiek atbalstīts tikai parastais gadījums bez nosaukumvietas, kas aptver lielāko daļu ar roku rakstītu vai iegūtu XML/HTML dokumentu. Ja jūsu dokuments deklarē XML nosaukumvietu (piemēram, `xmlns="..."` saknes elementā), `document.evaluate` pieprasa nosaukumvietas apzinošu resolver funkciju, kas kartē prefiksus uz URI, ko šis vienkāršais rīks nenodrošina — izteiksmes attiecībā uz nosaukumvietu saturošu XML var atgriezt nulles atbilstības, pat ja tās izskatās pareizas. Tas ir zināms ierobežojums, nevis kļūda: noņemiet nosaukumvietas deklarāciju no sava parauga vai izmantojiet local-name() funkciju kā apkārtceļu (piemēram, `//*[local-name()='title']`).
Vai mans XML vai XPath izteiksme tiek nosūtīta uz serveri?
Nē. Viss darbojas lokāli, izmantojot jūsu pārlūka iebūvēto `DOMParser` un `document.evaluate()` — to pašu dzinēju, ko jūsu pārlūks jau izmanto iekšēji. Nekas, ko rakstāt vai ielīmējat, nekad nepamet jūsu ierīci.