XPath sintaksė. XPath užklausos kalba

     (protėviai) yra visi konteksto mazgo protėviai, įskaitant tėvus, senelius, senelius ir pan. Šioje ašyje visada yra šaknų mazgas - nebent kontekstinis mazgas yra pats šaknų mazgas.

Pažvelkite į 7.3 sąrašą, kuriame naudokite ašį

  Visų elementų protėvių pavadinimų paieška (saugomi elemente). Sąrašas 7.3. Priekinės ašies taikymas
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

Čia pateikiamas šio stiliaus lapo taikymo rezultatas

:

Naudojant protėvių ar savęs ašį

  jame yra visi konteksto mazgo protėviai, taip pat pats kontekstinis mazgas. Tai, be kita ko, reiškia, kad tokia ašis visada turi šakninį mazgą.

7.4 įtraukimas prideda atributus

  vertę „Steve“ visame dokumente. Sąrašas 7.4. planets.xml su AUTHOR atributais
.0553
58.65
1516
.983
43.4
.815
116.75
3716
.943
66.8
1
2107
1
128.4

Tarkime, kad dabar noriu išvardyti visų elementų protėvių vardus

turintis atributą ir dabartinį elementą, jei jis turi atributą. Tai galima padaryti naudojant ašį ir funkciją (7.5 sąrašas). Sąrašas 7.5. Naudojant protėvių ar savęs ašį
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

Čia yra rezultatas; parodo pasirinktus visų trijų elementų protėvius

, įskaitant elementą, jei jis turi atributą:

Programos palikuonių ašis

  (palikuonis) yra visi kontekstinio mazgo palikuonys. Atkreipkite dėmesį, kad čia nėra atributų arba vardų vietos mazgų, nes jie nėra laikomi vaikų mazgų.

Toliau pateiktas pavyzdys (7.6 sąrašas) parodo, kaip dirbti su šia ašimi. Šį kartą noriu prie elemento pridėti pastabą

  Gyvsidabris:
  (Atsiprašome, bet Mercury sprogo ir nebėra.). Norint rasti „Mercury“, turiu tik patikrinti, ar bet kurio elemento palikuoniui yra eilutės reikšmė „“, kurią aš padarysiu naudodamas XPath išraišką pasirinkto predikato viduje. Sąrašas 7.6. Programos palikuonių ašis
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e
Atsiprašome. Gyvsidabris susprogdino ir nebėra prieinamas.

Čia pateiktas dokumentas, papildytas nauju elementu.

  tik Mercury:
.0553
58.65
1516
.983
43.4
Atsiprašome, Mercury susprogdino ir nebepasiekia.
.815
116.75
3716
.943
66.8

Palikuonių ar savęs ašies taikymas

  jame yra visi kontekstinio mazgo palikuonys ir pats kontekstinis mazgas. Tačiau atkreipkite dėmesį, kad jame nėra vardų atributų ir mazgų.

Toliau pateiktas pavyzdys (7.7 sąrašas) rodo, kaip dirbti su ašimi. Tokiu atveju sukūriau supaprastintą stiliaus lapą (išsamesnę informaciją apie supaprastintus stiliaus lapus žr. 2 skyriuje), kuris apdoroja visus elementus, naudodamas palikuonis, generuodamas jau pažįstamą planetos duomenų HTML lentelę.

Sąrašas 7.7. Palikuonių ar savęs ašies taikymas

Tai viskas. Čia aš pritaikiau supaprastintą stiliaus lapą, kad pabrėžčiau, kad tokių palikuonių ašių pagalba

  arba, galite automatiškai apdoroti visus pasirinktus mazgus, taip pat kaip ir elementai.

Toliau taikoma taikymo ašis

Toliau esančioje ašyje (toliau) yra visi mazgai, esantys po konteksto mazgo pagal dokumente nurodytą tvarką (kitaip tariant, tokia tvarka, kokia jie yra dokumente, pradedant nuo pradžios), išskyrus visus kontekstinio mazgo palikuonis, taip pat neįtraukiant mazgų atributai ir vardų vietos.

Šiame pavyzdyje (sąrašas 7.8) pasirenku kiekvieną elementą. Ir nukopijuokite visus vėlesnius elementus į gautą dokumentą.

Sąrašas 7.8. Toliau taikoma taikymo ašis
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e
   Gyvsidabris, jis nukopijuoja visus vėlesnius elementus - tai yra Venera, tada visi Veneros palikuonys, tada Žemė ir tada visi žemės palikuonys. Po to jis pasirenka Veneros elementą ir nukopijuoja visus šiuos elementus, ty Žemę ir visus Žemės palikuonis:
.815
116.75
3716
.943
66.8
.815
116.75
3716
.943
66.8
1
2107
1
128.4
1
2107
1
128.4
1
2107
1
128.4
1
2107
1
128.4

Kita vertus, naudojant ašį

  Tik kiti broliai bus nukopijuoti į gautą dokumentą, ty tik elementus, kaip matysime kitame skyriuje.

Taikykite sekančią brolio ašį

  apima visus vėlesnius konteksto mazgo brolius.

Pavyzdžiui, galiu pasirinkti kiekvieną elementą.

  ir nukopijuokite visus mazgo mazgus į gautą dokumentą taip (sąrašas 7.9). Sąrašas 7.9. Taikykite sekančią brolio ašį
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

Tokiu atveju pirmieji du mazgai nukopijuojami, po gyvsidabrio (Venera ir Žemė), tada nukopijuojamas kitas Veneros mazgas, Žemė. Pati Žemė neturi brolių, todėl rezultatas atrodo taip:

.815
116.75
3716
.943
66.8
1
2107
1
128.4
1
2107
1
128.4

Vardų erdvės ašies naudojimas

  yra kontekstinio mazgo vardų vietos mazgai. Atkreipkite dėmesį, kad ši ašis yra tuščia, jei kontekstinis mazgas nėra elementas. Elementas turi vardų pavadinimą:

Kiekvienas elemento atributas, kurio pavadinimas prasideda „xmlns:“;

Kiekvienas protėvio elemento atributas, kurio pavadinimas prasideda „xmlns:“ (žinoma, jei pats elementas ar artimiausias protėvis dar nepareiškia vardų erdvės);

Atributas

jei elementas ar protėvis turi atributą.

Toliau pateiktame pavyzdyje (7.10 sąrašas) noriu rodyti elemento vardų erdvę

  gautame dokumente ir šaltinio dokumente pavadinimą „http://www.starpowder.com“ priskyriau vardų sričiai. Sąrašas 7.10. planets.xml su vardų deklaracija
.0553
58.65
1516
.983
43.4

Čia yra stiliaus lapas (7.11 sąrašas), kuriame aš tikrinu elementuose naudojamas vardų vietas

. Sąrašas 7.11. Naudojant vardų erdvę planets.xml
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

Tačiau gautas dokumentas (atkreipkite dėmesį, kad dokumento tipas gali skirtis priklausomai nuo XSLT procesoriaus):

Naudokite pagrindinę ašį

Tėvų ašyje yra tėvų (ir tik tėvų) kontekstinio mazgo, jei toks yra.

Tarkime, noriu pakeisti elemento „Earth“ turinį

  apie "\u003e\u003e (Žemės masė laikoma 1). Šis šablonas (7.12 sąrašas) tai patikrina, jei pagrindiniame elemente yra elementas su eilutės reikšme „Žemė“. Sąrašas 7.12. Naudokite pagrindinę ašį
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

Žemės masė nustatoma į 1.

Ir čia yra rezultatas:

.0553
58.65
1516
.983
43.4
.815
116.75
3716
.943
66.8
Žemės masė nustatoma į 1.
2107
1
128.4

Naudokite ašį prieš

  jame yra visi mazgai, esantys priešais kontekstinį mazgą, pagal dokumente nurodytą tvarką, išskyrus visus konteksto mazgo protėvius, taip pat neįtraukiant atributinių mazgų ir vardų vietos.

Tarkime, pavyzdžiui, turiu nustatyti elemento turinį

  tekstas „“ (Ši planeta yra toliau nuo Saulės nei Gyvsidabris.) Jei ši planeta iš tiesų yra toliau nuo Saulės nei Gyvsidabris. Vienas iš būdų tai padaryti yra patikrinti, ar gyvsidabris yra priešais planetą pagal dokumente nurodytą tvarką, naudojant ašį (7.13 sąrašas). Sąrašas 7.13. Naudokite ašį prieš
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e
Ši planeta yra toliau nuo Saulės nei Gyvsidabris.

Jei dabartinė planeta yra po gyvsidabrio, į savo elementą galiu įterpti pranešimą

. Rezultatas yra toks:
.0553
58.65
1516
.983
43.4
.815
116.75
3716
.943
Ši planeta yra toliau nuo Saulės nei Gyvsidabris.
1
2107
1
Ši planeta yra toliau nuo Saulės nei Gyvsidabris.

Naudokite ankstesnę brolio ašį

  yra visi ankstesni konteksto mazgo broliai. Atkreipkite dėmesį, kad jei kontekstinis mazgas yra atributo mazgas arba vardų srities mazgas, ašis bus tuščia.

Ką daryti, jei, pavyzdžiui, reikia sukurti šabloną, kuris tik pasirinks elementus

  gyvsidabrio elementas? Norėdami tai padaryti, galite patikrinti, ar broliai egzistuoja prieš elementą, kuris yra eilutės reikšmės elementas. Jei taikote ašį (7.14 sąrašas), paieška bus apribota dabartiniu elementu, o tai reiškia, kad gyvsidabris nebus pasirinktas, nebent esate teisingame elemente. Sąrašas 7.14. Naudokite ankstesnę brolio ašį
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

Ir čia yra rezultatas:

.0553
58.65
1516
.983
Tai yra planetos Mercury, arčiausiai saulės.
.815
116.75
3716
.943
66.8
1
2107
1
128.4

Naudokite savęs ašį

  yra tik kontekstinis mazgas. Pagal vieną iš „XPath“ santrumpų, kaip matysime vėliau, vietoj „“ galite naudoti „.“.

Ši ašis yra naudinga nepamiršti, nes, kaip prisimenate 4 skyrių, jei nenurodote ašies, numatytoji ašis bus

ir kai kuriais atvejais gali tekti kreiptis į aktyvųjį mazgų. Pavyzdžiui, ji tikrosios vertės vertę priims tik tuo atveju, jei kontekstinis mazgas yra elementas.

Toliau pateiktame pavyzdyje sujungiu elementų modelius

  ir vienu modeliu. Kadangi šie elementai yra skirtingi formatai, turiu juos skirtingai traktuoti tame pačiame šablone (kuris gali būti atliktas tikrinant ašių vertes, kurios grąžina ne tuščią mazgo rinkinį, jei kontekstinis mazgas yra elementas, ir grąžinant tuščią mazgo rinkinį, jei kontekstinis mazgas yra elementas):

Tai užbaigia naujų „XPath“ ašių peržiūrą. Pereikime prie pavyzdžių.

Kelių pavyzdžiai

Mes pakankamai ištyrinėjome vietovės kelio teoriją. Tačiau, žinoma, geriausia būtų įvaldyti šią medžiagą su pavyzdžiais, todėl pateikiu tokį kelių pavyzdžių sąrašą (sumažintos versijos laikomos po šio sąrašo):

  . Grąžina konteksto mazgo vaikus; . Grąžina visus kontekstinio mazgo vaikų teksto mazgus; . Grąžina visus konteksto mazgo vaikus; . Grąžina konteksto mazgo atributą; . Grąžina visus palikuonių kontekstinio mazgo elementus; . Grąžina visus konteksto mazgo protėvius; . Grąžina konteksto mazgo protėvius. Jei kontekstinis mazgas taip pat yra, kontekstinis mazgas taip pat grįžta; . Grąžina palikuonių kontekstinio mazgo elementus. Jei kontekstinis mazgas taip pat yra, kontekstinis mazgas taip pat grįžta; . Grąžinamas kontekstinis mazgas, jei jis yra elementas;
vaikas :: PLANET / palikuonis :: NAME
. Grąžina konteksto mazgo vaikų palikuonis; . Grąžina visus konteksto mazgo anūkus; . Grąžina šakninį mazgą; . Grąžina visus dokumento elementus;
/ palikuonis :: PLANET / vaikas :: NAME
. Grąžina visus elementus su tėvais dokumente; . Grąžina trečiąjį konteksto mazgo vaiką;
vaikas :: PLANET
. Grąžina paskutinį konteksto mazgo vaiką;
/ palikuonis :: PLANET
. Grąžina trečiąjį dokumento elementą;
vaikas :: PLANETS / vaikas :: PLANET / vaikas :: NAME
. Grąžina trečią elemento ketvirtojo elemento elementą; . Po pirmųjų trijų kartų grąžina visus konteksto mazgo vaikus;
ankstesnis brolis / sesuo :: NAME
. Grąžina antrąjį ankstesnį konteksto mazgo brolį;
vaikas :: *
. Grąžina vaikus ir kontekstinį mazgą.
vaikas :: *
. Grąžina paskutinį vaiko ar kontekstinį mazgą.

Kaip matote, kai kurių išraiškų sintaksė yra gana paini, o jų įvedimas taip pat yra gana ilgas. Tačiau, kaip ir mėginiuose, yra sutrumpinta XPath sintaksė.

XPath sutrumpinta sintaksė

XPath sintaksės santrumpos gali būti gana patogios. Toliau pateikiamos taisyklės:

  gali būti sutrumpintas kaip; gali būti sutrumpintas kaip; gali būti sutrumpintas kaip; gali būti sutrumpintas kaip; gali būti sutrumpintas.

Pavyzdžiui, vietos kelias

  - trumpas
savarankiškas :: mazgas () / palikuonis ar savęs :: mazgas () / vaikas :: PLANET
. Taip pat galite sutrumpinti predikcinę išraišką, pavyzdžiui, kaip ir tt Darbas su XPath keliais, turinčiais trumpesnę sintaksę, yra daug lengviau. Toliau pateiktame sąraše pateikiami keli pavyzdiniai vietovės takai, naudojant sutrumpintą sintaksę: grąžina konteksto mazgo vaikus; grąžina visus kontekstinio mazgo vaiko elementus; grąžina visus kontekstinio mazgo vaikų teksto mazgus; grąžina konteksto mazgo atributą; grąžina visus konteksto mazgo požymius; grąžina trečiąjį konteksto mazgo vaiką; grąžina paskutinį konteksto mazgo vaiką; grąžina visus konteksto mazgo anūkus; grąžina antrąjį elemento trečiojo elemento elementą; grąžina visus dokumento šaknies palikuonis; grąžina kontekstinio mazgo vaikų elementų palikuonius; grąžina visus elementus, turinčius tėvą; grąžina kontekstinį mazgą; grąžina palikuonių kontekstinio mazgo elementus; grąžina konteksto mazgo tėvą; grąžina kontekstinio mazgo pagrindinį atributą; grąžina visus konteksto mazgo palikuonių tėvus ir konteksto mazgo tėvą; grąžina kontekstinio mazgo vaikus, turinčius vaikų; grąžina kontekstinio mazgo vaikus, turinčius vaikų, kurių tekstas lygus „Venus“; grąžina visus kontekstinio mazgo vaikus, turinčius atributą, kurio reikšmė ""; grąžina šeštąjį konteksto mazgo vaiką tik tuo atveju, jei šis vaikas turi atributą, kurio reikšmė yra „dienos“. Taip pat galite rašyti; grąžina visus kontekstinio mazgo vaikus, turinčius atributą ir atributą;
// PLANET
"pasirenka visus elementus, kurių vertė skiriasi nuo bet kurio ankstesnio elemento vertės; pasirenka bet kurį elementą, kuris yra pirmasis jo tėvo vaikas; pasirenka pirmuosius penkis konteksto mazgo vaikus, turinčius atributą.

XPath išraiškos tikrinimas

„Xalan“ pakete yra patogi pavyzdinė programa „ApplyXPath.java“, kuri leidžia jums taikyti „XPath“ išraišką dokumentui ir pažvelgti į rezultatą, kuris labai padeda testuojant. Norėdami paleisti šį pavyzdį, turėsite surinkti

  su „Java“ platinimu įtraukta „Java“ programa.

Pavyzdžiui, naudosiu „XPath“ išraišką “

"Pagal. Toliau pateikiamas rezultatas, rodantis visus elementus, kurie yra elementų vaikai (žymos, kurias pridėjo „ApplyXPath“ programa):
% java ApplyXPath planets.xml PLANET / NAME
GyvsidabrisVeneraŽemė

XPath 2.0

„XPath“ yra atnaujinamas ir apima paramą „XSLT 2.0“ (žr. Www.w3.org/TR/xpath20req). XPath 2.0 užduotys yra šios:

Supaprastinkite operacijas su turinio tipais, kuriuos palaiko XML schema;

Operacijų su eilutės turiniu supaprastinimas;

Parama atitinkamiems XML standartams;

Geresnis naudojimas;

Geresnė sąveika;

Parama tarptautinėms kalbos priemonėms;

Atgalinio suderinamumo išsaugojimas;

Padidintas procesoriaus efektyvumas.

Toliau pateiktame sąraše pateikiama XPath reikalavimų apžvalga. Pagrindiniai punktai yra parama XML schemai ir reguliarioms išraiškoms, kuri suteikia jums galimybę dirbti su stygomis ir ieškoti styginių. (Daugiau informacijos apie reguliarias išraiškas galima rasti adresu http://www.perldoc.com/perl5.6/pod/perlre.html.) Pagal W3C, XPath 2.0:

Turi remti W3C XML architektūrą, gerai suderinamą su kitais XML šeimos standartais;

Turi išreikšti savo duomenų modelį pagal XML informacijos rinkinį (infoset);

Turi būti pateikta bendra XSLT 2.0 ir XML užklausos kalba sintaksė;

Turi būti palaikomas aiškus palyginimas

„Arba“ ir lygybės sintaksė;

Privalo išplėsti daugybę suvestinių funkcijų (pvz., XSLT naudotojams dažnai reikia pridėti funkcijų

  ir);

Turi išlaikyti atgalinį suderinamumą su XPath 1.0;

Turi būti numatytos sankryžos ir skirtumų funkcijos - tai yra XPath 1.0 palaikymas, jungiantis du mazgų rinkinius, o tai turi būti pridėta prie sankirtos ir skirtumo funkcijų;

Turi būti palaikoma unary plus (kadangi dešimtainiai skaičiai XML schemoje gali turėti pagrindinį pliusą);

Turėtų pagerinti naudojimąsi;

Turi mažinti vietos nustatymo veiksmų apribojimus;

Turi įgyvendinti sąlyginę operaciją, kuri veikia trimis išraiškomis - 1 išraiška (loginė operacija), 2 išraiška ir 3 išraiška. Jei 1 išraiška turi reikšmę „tiesa“, išraiška 2 turi būti apskaičiuota ir, jei 1 išraiška yra „false“, 3 išraiška yra „false“, 3 išraiška ;

Turi apibrėžti nuoseklią sintaksę subexpressions, kurios tvarko elementų rinkinius;

Turi būti palaikomos papildomos eilutės funkcijos. Pavyzdžiui, W3C svarsto galimybę papildyti lėšas styginiams pakeisti, užpildyti simbolius ir atvejų konversijas;

Turi būti palaikomos kaupimo funkcijos, kai taikomos kolekcijoms. Pavyzdžiui, kai kurie „XPath 1.0“ naudotojai turėjo taikyti suvestinės funkciją, pvz.,

, prie reikšmių, taikomų mazgų rinkiniams;

Turi būti palaikomos reguliarios išraiškos ieškoti eilutėse naudojant įprastą išraišką, nustatytą XML schemoje;

Turi būti palaikomi elementarūs XML schemos duomenų tipai. Tai yra, be tipų, palaikomų „XPath 1.0“ duomenų modelio - linijos, skaičiaus, loginės vertės ir mazgų rinkinio - „XPath 2.0“ duomenų modelis turi paremti elementarius XML schemos duomenų tipus;

Turi remti vieno ir dvigubo tikslumo slankiojo kablelio atvaizdus, ​​palaikomus XML schema, kuri naudoja mokslinį žymėjimą;

Turi apibrėžti tinkamą funkcijų rinkinį, kad vartotojas galėtų dirbti su elementariais XML schemos duomenų tipais;

Prie „XPath“ reikia pridėti „sąrašo“ duomenų tipą (kadangi XML schema leidžia nustatyti paprastus tipus, paveldėtus iš sąrašo);

Turi remti prieigą prie paprastų elementų tipų ir atributų reikšmių. Kadangi XML schemos yra daug naujų tipų, XPath 2.0 turi palaikyti prieigą prie savo, paprasto tipo, elemento ar atributo vertės;

Turi apibrėžti operatorių elgseną dėl nulinių argumentų;

Turi būti priemonės, leidžiančios pasirinkti elementus ar atributus, pagrįstus aiškiu XML schemos tipu;

Turi būti priemonės, leidžiančios pasirinkti elementus ar atributus pagal XML schemos tipų hierarchiją;

Turi būti priemonės, leidžiančios pasirinkti elementus, pagrįstus XML schemos pakeitimo grupėmis;

Turi būti palaikomi paieškos įrankiai, pagrįsti unikaliais apribojimais ir schemos raktais.

Nors atėjome prie skyriaus pabaigos, ne viskas pasakyta apie „XPath“. Ši tema bus tęsiama kitame skyriuje, kuriame atidžiau apžvelgsime XPath funkcijas ir funkcijas, kurios jau yra integruotos į XSLT.

„Xpath“ yra kalba, skirta užklausai „xml“ arba „xhtml“ dokumento elementui. Kaip ir SQL, xpath yra deklaracinė užklausos kalba. Norint gauti dominančius duomenis, jums reikia sukurti užklausą, kurioje aprašomi šie duomenys. Visi „juodi“ darbai jums padės atlikti vertėjo kalbą xpath.
  Labai patogus, ar ne? Pažiūrėkime, kokios funkcijos „xpath“ siūlo pasiekti tinklalapio mazgus.

Prašymo sukurti tinklalapio mazgus kūrimas

  Atkreipiu jūsų dėmesį į nedidelį laboratorinį darbą, kurio metu parodysiu xpath užklausų kūrimą tinklalapiui. Galėsite pakartoti savo nurodytus prašymus ir, svarbiausia, bandysite įvykdyti savo pačių. Tikiuosi, kad šis straipsnis bus vienodai įdomus pradedantiesiems ir programuotojams, susipažinusiems su xpath xml.

Laboratorijai reikia:
   - interneto puslapis xhtml;
   - „Mozilla Firefox“ naršyklė su priedais;
   - firebug;
   - FirePath;
   (galite naudoti bet kurią kitą naršyklę su vaizdo parama xpath)
   - šiek tiek laiko.

Kaip eksperimento tinklalapį siūlau pagrindinį „World Wide Web Consortium“ („http://w3.org“) svetainės puslapį. Būtent ši organizacija kuria xquery kalbas (xpath), xhtml specifikaciją ir daugelį kitų interneto standartų.

Užduotis
  Gaukite iš xhtml kodo pagrindinis puslapis  w3.org informacija apie konsorciumų konferencijas naudojant xpath užklausas.
  Pradėkime rašyti xpath užklausas.
Pirmasis xpath prašymas
  Atidarykite Firepath skirtuką FireBug, pasirinkite elementą analizei naudodami selektorių, spustelėkite: Firepath sukūrė xpath užklausą į pasirinktą elementą.

Jei pasirinkote pirmojo įvykio pavadinimą, prašymas bus toks:

   / a

Pašalinus papildomus indeksus, prašymas atitiks visus „pavadinimo“ tipo elementus.

Firepath išryškina užklausai tinkamus elementus. Realiu laiku galite matyti, kurie dokumentų mazgai atitinka užklausą.

Prašymas pateikti informaciją konferencijų vietose:
   .//* eljárás@id="w3c_home_upcoming_events" [/ul/li/div/p

Taigi gauname rėmėjų sąrašą:
   .//* eljárás@id="w3c_home_upcoming_events" [/ul/li/div/p

Xpath sintaksė

  Grįžkime prie sukurtų užklausų ir pamatysite, kaip jie veikia.
  Apsvarstykite pirmąjį prašymą išsamiai

Šioje užklausoje pabrėžiau tris dalis, kad galėčiau parodyti xpath galimybes. (Skirstymas į dalis yra sugavimo)

Pirmoji dalis
.//   - rekursinis nusileidimas iki nulio ar daugiau hierarchijos lygių iš dabartinio konteksto. Mūsų atveju dabartinis kontekstas yra dokumento šaknis.

Antroji dalis
*   - bet kuris elementas
[@ id = "w3c_home_upcoming_events"] - predikatas, kurio pagrindu ieškome mazgo, kurio ID atributas yra lygus "w3c_home_upcoming_events". XHTML elementų identifikatoriai turi būti unikalūs. Todėl užklausa „bet kuris elementas, turintis konkretų ID“ turi grąžinti vienintelį ieškomą mazgą.

Galime pakeisti *   prie tikslaus mazgo pavadinimo div  šiame prašyme
   div [@ id = "w3c_home_upcoming_events"]

Taigi, mes nusileidžiame per dokumentų medį į reikiamą mazgo div [@ id = "w3c_home_upcoming_events"]. Mes visiškai nerūpi, ką DOM medis susideda ir kiek hierarchijos lygių išlieka aukščiau.

Trečioji dalis
/ ul / li / div / p / a  –Patiesos kelias į konkretų elementą. Kelias susideda iš adresų nustatymo ir mazgų patikrinimo (ul, li ir kt.). Žingsniai atskiriami „/“ (brūkšniu).

„Xpath“ kolekcijos
  Ne visada galima pasiekti dominančio mazgo, naudojant predikcinius arba adresavimo veiksmus. Labai dažnai tuo pačiu hierarchijos lygiu yra kuo daugiau to paties tipo mazgų, todėl būtina pasirinkti „tik pirmąjį“ arba „tik antrąjį“ mazgus. Tokiais atvejais pateikiamos kolekcijos.

Xpath rinkiniai leidžia pasiekti elementą pagal indeksą. Indeksai atitinka tvarką, kurioje elementai buvo pateikti originaliame dokumente. Kolekcijų eilės numeris skaičiuojamas iš vieno.

Remiantis tuo, kad po „konferencijos pavadinimo“ „vieta“ visada yra antroji pastraipa, gauname tokį prašymą:
   .//* eljárás@id="w3c_home_upcoming_events" [/ul/li/div/p
  Kai p yra antrojo elemento elementas kiekvienam sąrašo mazgui / ul / li / div.

Taip pat galime gauti rėmėjų sąrašą, klausdami:
   .//* eljárás@id="w3c_home_upcoming_events" [/ul/li/div/p

Kai kurios „hpath“ funkcijos
  XPath programoje yra daug funkcijų, skirtų dirbti su kolekcijos elementais. Aš duosiu tik kai kuriuos iš jų.

paskutinis ():
  Grąžina paskutinį kolekcijos elementą.
  Užklausa ul / li / div / p - grąžins paskutines kiekvienos sąrašo „ul“ mazgas.
  Pirmoji () funkcija nėra pateikta. Norėdami pasiekti pirmąjį elementą, naudokite indeksą „1“.

tekstas ():
  Grąžina elemento testo turinį.
   .//a - gauname visas nuorodas su tekstu „Archyvas“.

pozicija () ir mod:
  pozicija () - grąžina rinkinio elemento padėtį.
  mod yra likusi skyriaus dalis.

Derinant šias funkcijas galime gauti:
   - netgi elementų elementų
   - lygūs elementai: ul / li

Palyginimo operacijos

  • < - логическое «меньше»
  • \u003e - loginis "daugiau"
  • <= - логическое «меньше либо равно»
  • \u003e = - loginis "didesnis arba lygus"
   ul / li, ul / li - išvardykite elementus, pradedant nuo trečiojo numerio ir atvirkščiai.

XPath naudoja kelio išraiškas, kad pasirinktų XML dokumente esančius mazgus ir mazgų rinkinius. Mazgas pasirenkamas sekant nurodytu keliu arba vadinamaisiais žingsniais.

XML dokumento pavyzdys

Šis XML dokumentas bus naudojamas XPath sintaksės demonstravimui:

Priminimas Siųsti laišką! Priminimas El. Paštas išsiųstas

Mazgų pasirinkimas

Norėdami pasirinkti mazgą XML dokumente, XPath naudoja kelio išraiškas. Mazgas yra parenkamas pagal nurodytą kelią. Naudingiausios kelio išraiškos yra:

Toliau pateiktoje lentelėje išvardytos kai kurios „XPath“ išraiškos, leidžiančios atlikti tam tikrus pasirinkimus XML pavyzdžio dokumente:

XPath išraiška Rezultatas
pranešimus Pasirenka visus mazgus su pavadinimu „žinutės“
/ žinutės Pasirenka šakninį pranešimų elementą.
Pastaba: Jei kelias prasideda brūkšniu (/), jis visada yra absoliutus kelias  į elementą!
žinutės / pastaba Pasirenka visus pastabos elementus, kurie yra pranešimų elemento palikuonys.
// Pastaba Parenka visus pastabų elementus, nepriklausomai nuo to, kur jie yra dokumente.
žinutės // pastaba Parenka visus pastabų elementus, kurie yra pranešimų elemento palikuonys, nepriklausomai nuo to, kur jie yra iš pranešimų elemento.
// @ data Pasirenka visus nurodytus datą atributus

Predikatai

Predikacijos leidžia jums rasti tam tikrą mazgą arba mazgą, turinčią tam tikrą reikšmę.

Predikatai visada pateikiami skliausteliuose.

Toliau pateiktoje lentelėje išvardytos kai kurios XPath išraiškos su prediktais, leidžiančiais atlikti pasirinkimą XML pavyzdžio dokumente:

XPath išraiška Rezultatas
/ žinutės / pastaba Pasirenka pirmąjį pastabos elementą, kuris yra tiesioginis pranešimų elemento palikuonis.
PastabaA: IE 5,6,7,8,9 pirmasis mazgas bus, bet pagal W3C jis turėtų būti. Norėdami išspręsti šią problemą IE, turite nustatyti parinktį „Language Language“ („Pasirinkimo kalba“) į „XPath“ reikšmę.
  „JavaScript“: xml.setProperty („Pasirinkimo kalba“, „XPath“);
/ žinutės / pastaba Pasirenka paskutinį pastabos elementą, kuris yra tiesioginis pranešimų elemento palikuonis.
/ žinutės / pastaba Pasirenka priešpaskutinę pastabos dalį, kuri yra tiesioginis pranešimų elemento palikuonis.
/ žinutės / pastaba Pasirenka visus antraštės elementus, turinčius datos atributą.
// antraštė [@ date = "10/01/2008"] Pasirenka visus antraštės elementus, kurių datos atributas turi reikšmę „10/01/2008“

Nežinomų mazgų pasirinkimas iš anksto

Norėdami rasti anksčiau nežinomus XML dokumentų mazgus, XPath leidžia naudoti specialius simbolius.

Toliau pateiktoje lentelėje išvardytos kai kurios XPath išraiškos su specialiais simboliais, leidžiančiais atlikti pasirinkimą XML pavyzdžio dokumente:

Kelių maršrutų pasirinkimas

Operatoriaus naudojimas | XPath išraiška leidžia jums pasirinkti įvairiais būdais.

Šioje lentelėje išvardytos kai kurios XPath išraiškos, leidžiančios jums pasirinkti XML pavyzdžio pavyzdį.

Šiame skyriuje parodyta pagrindinė XPath sintaksė, pagrįsta kai kuriais pavyzdžiais.

XML dokumento pavyzdys

Toliau pateiktas XML dokumentas bus naudojamas kaip pavyzdys:

Priminimas Siųsti laišką! 4 Priminimas El. Paštas išsiųstas 7

Įkeliamas XML dokumentas

Norėdami atsisiųsti XML dokumentą, naudokite XMLHttpRequest objektą, kurį palaiko visos pagrindinės naršyklės.

Var xmlhttp = naujas XMLHttpRequest ();

Senosiose „Microsoft“ naršyklėse (IE 5 ir 6) naudojamas kodas:

Var xmlhttp = naujas „ActiveXObject“ („Microsoft.XMLHTTP“);

Mazgų pasirinkimas

Deja, skirtingos naršyklės palaiko skirtingus būdus, kaip dirbti su „XPath“.

„Chrome“, „Firefox“, „Edge“, „Opera“ ir „Safari“ naudoja įvertinimo () metodą, kad pasirinktų mazgus:

XmlDoc.evaluate (xpath, xmlDoc, , XpathResult.ANY_TYPE, null);

„Internet Explorer“ naudoja SelectNodes () metodą:

XmlDoc.selectNodes (xpath);

Pasirinkite visas antraštes

Šiame pavyzdyje parenkami visi antraštės mazgai:

   / žinutės / pastaba / antraštė

Pasirinkite pirmosios pastabos pavadinimą

Toliau pateiktame pavyzdyje pasirinktas pranešimų elemento pirmojo mazgo antraštė:

   / žinutės / pastaba / antraštė

Visų departamentų atranka

Šis pavyzdys parenka tekstą iš visų stalų svetainių:

   / žinutės / pastaba / stalas

Pasirinkite skyrius, kurių skaičius didesnis nei 4

Toliau pateiktame pavyzdyje pasirenkami visi stalo mazgai, kurių reikšmė didesnė kaip 4:

   / žinutės / pastaba / stalas

Pasirinkite įrašų antraštes departamentams, kurių numeriai yra didesni nei 4

Toliau pateiktame pavyzdyje parenkami visi tų užrašų mazgų, kurių stalo elemento reikšmė yra didesnė nei 4:

   / žinutės / pastaba / antraštė