Sintaksa e shkurtuar e XPath. Shembuj të pyetjeve të xpath në html Duke përdorur boshtin e mëposhtëm

XPath përdoret për të lundruar nëpër elementet dhe atributet e një dokumenti XML. XPath është një nga elementët thelbësorë në standardin W3C XSLT.

1 Cfare ndodhi XPath

Shprehjet XPath

XPath përdor shprehjet e rrugës për të zgjedhur nyjet individuale ose një grup nyjesh në një dokument XML. Këto shprehje janë shumë të ngjashme me shprehjet që shihni kur punoni me një sistem skedar kompjuterik tradicional.

Funksionet standarde të XPath

XPath përfshin mbi 100 funksione të integruara. Ka funksione për vargjet dhe vlerat numerike, datën dhe kohën, krahasimin e nyjeve dhe manipulimin e QName, menaxhimin e sekuencave, vlerat boolean dhe shumë më tepër.

XPath përdoret në XSLT

XPath është një nga elementët thelbësorë në standardin XSLT. Pa njohuri për XPath, nuk do të jeni në gjendje të krijoni dokumente XSLT.

2 Terminologjia XPath

Nyjet

Ekzistojnë shtatë lloje nyjesh në XPath: elementi, atributi, teksti, hapësira e emrave, udhëzimet e përpunimit, komentet dhe nyjet e dokumentit. Dokumentet XML përpunohen si pemë nyjesh. Elementi i sipërm i pemës quhet elementi rrënjë. Shikoni dokumentin e mëposhtëm XML:

Harry Potter J. K. Rowling 2005 29.99

Shembuj të nyjeve në dokumentin XML më sipër:

(elementi rrënjë) J. K. Rowling (nyja) lang = "en"(atribut)

Vlerat atomike

Vlerat atomike janë nyje që nuk kanë fëmijë ose prindër. Shembull i vlerave atomike:

J. K. Rowling "en"

Elementet

Elementet janë vlera ose nyje atomike.

3 Marrëdhënia nyjet

Prindi

Çdo element dhe atribut ka një prind. Në shembullin e mëposhtëm, elementi i librit është prindi i elementeve të titullit, autorit, vitit dhe çmimit:

Harry Potter J K Rowling 2005 29.99

Pasardhësit

Nyjet e elementeve mund të kenë zero, një ose më shumë fëmijë. Në shembullin e mëposhtëm, elementët "titulli", "autori", "viti" dhe "çmimi" janë të gjithë fëmijë të elementit të librit:

Harry Potter J K Rowling 2005 29.99

Elemente të të njëjtit nivel

Këto janë nyje që kanë të njëjtin prind. Në shembullin e mëposhtëm, elementët "titulli", "autori", "viti" dhe "çmimi" janë të gjithë elementë të të njëjtit nivel:

Harry Potter J K Rowling 2005 29.99

Paraardhësit

Prindi i nyjës, prindi i prindit të nyjës etj. Në shembullin e mëposhtëm, paraardhësit e elementit të titullit janë elementët e librit dhe të librarisë:

Harry Potter J K Rowling 2005 29.99

Pasardhësit

Fëmijët e një nyje, fëmijët e një nyje etj. Në shembullin e mëposhtëm, fëmijët e elementit "librari" janë elementet "libër", "titulli", "autori", "viti" dhe "çmimi":

Harry Potter J K Rowling 2005 29.99

4 Sintaksë XPath

XPath përdor shprehjet e rrugës për të zgjedhur nyjet ose grupet e nyjeve në një dokument XML. Një nyje mund të zgjidhet duke ndjekur një shteg ose me hapa. Ne do të përdorim dokumentin e mëposhtëm XML në shembujt e mëposhtëm.

Harry Potter 29.99 Mësimi i XML 39.95

Zgjedhja e nyjeve

Duke përdorur shprehjet XPath për të zgjedhur nyjet në një dokument XML, mund të zgjidhni një nyje duke ndjekur një shteg ose hapa. Shprehjet më të dobishme të rrugës janë renditur më poshtë:

Tabela më poshtë liston disa shtigje shprehjeje dhe rezultatin e ekzekutimit të shprehjes:

Shprehja XPath Rezultati
librari Zgjedh të gjitha nyjet me emrin "librari"
/librari Zgjedh elementin rrënjësor të librarisë

Shënim: Nëse një shteg fillon me një vijë të pjerrët (/), ajo është gjithmonë një shteg absolut drejt elementit!

librari/libër Zgjedh të gjithë elementët "libër" që janë fëmijë të elementit "librari".
//libër Zgjedh të gjithë elementët "libër" pavarësisht se ku ndodhen në dokument
librari//libër Zgjedh të gjithë elementët "libër" që janë fëmijë të elementit "librari", pavarësisht se ku janë nën elementin "librari".
//@gjuhë Zgjedh të gjitha atributet që emërtohen "lang"

Kallëzues

Kallëzuesit përdoren për të gjetur një nyje specifike ose një nyje që përmban një vlerë specifike. Kallëzuesit janë gjithmonë të rrethuar me kllapa katrore. Tabela më poshtë liston disa shprehje shteg me kallëzues, dhe rezultatin e shprehjes:

Shprehjet XPath Rezultati
/librari/libër Zgjedh elementin e parë "libër", i cili është një fëmijë i elementit "librari".

Shënim: Në IE 5,6,7,8,9, nyja e parë ka një indeks prej , por sipas udhëzimeve të W3C, është . Për të zgjidhur këtë problem në IE, vendosni opsionin "SelectionLanguage" për XPath:

Në JavaScript: xml.setProperty("SelectionLanguage", "XPath");
/librari/libër Zgjedh elementin e fundit "libër" që është fëmijë i elementit "librari".
/librari/libër Zgjedh elementin e parafundit "libër", i cili është një fëmijë i elementit "librari".
/librari/libër Përzgjedhja e dy elementëve të parë "libër" që janë fëmijë të elementit "librari".
//titulli[@lang] Zgjedh të gjithë elementët "titull" që kanë një atribut të quajtur "lang"
//title[@lang="en"] Zgjedh të gjithë elementët "titull" që kanë një atribut "gjuhë" me një vlerë "en"
/librari/libër Zgjedh të gjithë elementët "libër" pas elementit "librari" që kanë një element "çmim" me vlerë më të madhe se 35.00
/librari/libër/titull Zgjedh të gjithë elementët "titull" të librit të elementit "librari" që kanë një element "çmim" me vlerë më të madhe se 35.00

Përzgjedhja e nyjeve të panjohura

Karakteret speciale të XPath mund të përdoren për të zgjedhur nyje të panjohura XML.

Në tabelën më poshtë, ne kemi renditur disa shtigje shprehjeje dhe rezultate të shprehjes:

Zgjedhja e shtigjeve të shumëfishta

Përdorimi i operatorit | në shprehjet XPath mund të zgjidhni shtigje të shumta. Tabela më poshtë liston disa shprehje të rrugës dhe rezultatet e tyre:

5 Boshtet XPath

Do të përdorim dokumentin e mëposhtëm XML më vonë në shembull.

Harry Potter 29.99 Mësimi i XML 39.95

Akset përcaktojnë grupe nyjesh, në lidhje me nyjen aktuale.

Emri i boshtit Rezultati
paraardhës Zgjedh të gjithë paraardhësit (prindërit, gjyshërit, etj.) të nyjës aktuale
paraardhës-ose vetë Zgjedh të gjithë paraardhësit (prindërit, gjyshërit, etj.) të nyjës aktuale dhe vetë nyjes aktuale
atribut
fëmijë
pasardhës Zgjedh të gjithë fëmijët (fëmijët, nipërit, etj.) të nyjës aktuale
pasardhës-ose vetë Zgjedh të gjithë fëmijët (fëmijët, nipërit, etj.) të nyjës aktuale dhe vetë nyjës aktuale
në vijim Zgjedh gjithçka në dokument pasi mbyllet etiketa e nyjës aktuale
pas-vëlla Zgjedh të gjitha nyjet e të njëjtit nivel pas nyjes aktuale
hapësira e emrit Zgjedh të gjitha nyjet në hapësirën e caktuar të emrave të nyjës aktuale
prind Zgjedh prindin e nyjes aktuale
pararendëse Zgjedh të gjitha nyjet që shfaqen përpara nyjes aktuale në dokument, duke përjashtuar paraardhësit, nyjet e atributeve dhe nyjet e hapësirës së emrave
paraardhës-vëlla Zgjedh të gjithë vëllezërit e motrat deri në nyjen aktuale
veten Zgjedh nyjen aktuale

6 Shprehjet shtigjet e kampionimit

Rruga e vendndodhjes mund të jetë absolute ose relative. Një shteg i vendndodhjes absolute fillon me një të pjerrët (/), por një shteg relative jo. Në të dyja rastet, rruga e marrjes së mostrave përbëhet nga një ose më shumë hapa të ndarë me prerje:

Rruga e vendndodhjes absolute:

/hap/hap/...

Rruga relative e marrjes së vendndodhjes:

Hapi/hapi/...

Çdo hap vlerësohet kundrejt nyjeve në grupin aktual të nyjeve. Hapi përbëhet nga:

  • boshti (përcakton marrëdhënien e pemës midis nyjeve të zgjedhura dhe nyjes aktuale);
  • kontrolli i nyjeve (identifikon një nyje brenda një boshti);
  • zero ose më shumë kallëzues (për të rafinuar më tej grupin e zgjedhur të nyjeve)

Sintaksa e hapit të marrjes është:

Emri i boshtit::nodetest Emri i boshtit::nodetest[parashikues]

Shembull Rezultati
fëmijë::libër Zgjedh të gjitha nyjet e librit që janë fëmijë të nyjes aktuale
atribut::lang Zgjedh atributin e gjuhës (lang) të nyjës aktuale
femije ::* Zgjedh të gjithë fëmijët e nyjës aktuale
atribut::* Zgjedh të gjitha atributet e nyjës aktuale
fëmijë::text() Zgjedh të gjitha nyjet e tekstit të nyjës aktuale
fëmijë:: nyje () Zgjedh të gjithë fëmijët e menjëhershëm të nyjës aktuale
pasardhës::libër Zgjedh të gjithë fëmijët e nyjës aktuale
paraardhës::libër Zgjedh të gjithë paraardhësit e "librave" të nyjës aktuale
paraardhës-ose-vetë::libër Zgjedh të gjithë paraardhësit e librit të nyjës aktuale - dhe nyjen aktuale nëse është gjithashtu një libër
fëmijë::*/fëmijë::çmimi Zgjedh të gjithë fëmijët e "çmimit" një nivel larg nga nyja aktuale

7 Operatorët XPath

Shprehjet XPath kthehen si një grup nyjesh, vargjesh, booleansh ose vlerash numerike. Më poshtë është një listë e operatorëve të përdorur në shprehjet XPath:

Operatori Përshkrim Shembull
| Llogarit dy grupe nyjesh //libër | //cd
+ Shtesa 6 + 4
- Zbritja 6 - 4
* Shumëzimi 6 * 4
div Divizioni 8 div 4
= Barazia çmimi=9.80
!= Pabarazia çmimi!=9.80
< Më pak se çmimi<9.80
<= Më pak ose e barabartë çmimi≤9.80
> Me shume se çmimi>9.80
>= Më shumë ose e barabartë çmimi≤9.80
ose Ose çmimi=9,80 ose çmimi=9,70
dhe DHE çmimi>9.00 dhe çmimi<9.90
mod Pjesa e mbetur e ndarjes 5 mod 2

8 Shembuj XPath

Le të ecim nëpër sintaksën bazë XPath me disa shembuj. Ne do të përdorim dokumentin e mëposhtëm XML "books.xml" në shembujt e mëposhtëm:

Italisht i perditshem Giada De Laurentiis 2005 30.00 Harry Potter J K Rowling 2005 29.99 XQuery Kick Start James McGovern Per Bothner Kurt Cagle James Linn Vaidyanathan Nagarajan 2003 49.99 Mësimi i XML Erik T. Ray 2003 39.95

Duke ngarkuar një dokument XML

Përdorni XMLHttpRequest për të shkarkuar dokumente XML, i cili mbështetet nga shumica e shfletuesve modernë:

Var xmlhttp=i ri XMLHttpRequest()

Kodi për shfletuesit e vjetër të Microsoft (IE 5 dhe 6):

Var xmlhttp=i ri ActiveXObject("Microsoft.XMLHTTP")

Zgjedhja e nyjeve

Fatkeqësisht, XPath mund të funksionojë ndryshe në Internet Explorer sesa në shfletues të tjerë. Në shembujt tanë ne do të përdorim kodin që duhet të funksionojë në shumicën e shfletuesve. Internet Explorer përdor metodën "selectNodes()" për të zgjedhur nyjet në një dokument XML:

XmlDoc.selectNodes(xpath);

Firefox, Chrome, Opera dhe Safari përdorin metodën vlerësuese() për të zgjedhur nyjet nga një dokument XML:

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

Zgjidhni të gjithë titujt

Shembulli i mëposhtëm zgjedh të gjitha nyjet e kokës:

/librari/libër/titull

Zgjedhja e titullit të librit të parë

Shembulli i mëposhtëm zgjedh titullin e nyjës së parë "libër" pas elementit "bookstore":

/librari/libër/titull

Zgjidhni të gjitha çmimet

Shembulli i mëposhtëm zgjedh tekstin e të gjitha nyjeve të çmimeve:

/librari/libër/çmim

Zgjedh nyjet me çmim >35

Shembulli i mëposhtëm zgjedh të gjitha nyjet me çmime mbi 35:

/librari/libër/çmim

Zgjedhja e nyjeve të kokës me çmim >35

Shembulli i mëposhtëm zgjedh të gjitha nyjet e titullit me një çmim më të madh se 35:

/librari/libër/titull

Xpath është një gjuhë pyetëse për elementët e dokumentit xml ose xhtml. Ashtu si SQL, xpath është një gjuhë deklarative e pyetjeve. Për të marrë të dhënat me interes, thjesht duhet të krijoni një pyetje që përshkruan këto të dhëna. Përkthyesi i gjuhës xpath do të bëjë të gjitha punët e pista për ju.
Shumë i përshtatshëm, apo jo? Le të shohim se çfarë aftësish ofron xpath për të hyrë në nyjet e faqeve të internetit.

Krijimi i një kërkese për nyjet e faqeve të internetit

Unë sjell në vëmendjen tuaj një punë të vogël laboratorike, gjatë së cilës do të demonstroj krijimin e kërkesave xpath në një faqe interneti. Ju do të jeni në gjendje të përsërisni kërkesat që ju dhashë dhe, më e rëndësishmja, do të përpiqeni të përmbushni kërkesat tuaja. Shpresoj që falë kësaj, artikulli do të jetë po aq interesant për fillestarët dhe programuesit e njohur me xpath to xml.

Për laboratorin do të na duhen:
- faqe web xhtml;
- Shfletuesi Mozilla Firefox me shtesa;
- zjarrit;
- Rruga e zjarrit;
(mund të përdorni çdo shfletues tjetër me mbështetje vizuale xpath)
- pak kohë.

Si një faqe interneti për kryerjen e një eksperimenti, unë propozoj faqen kryesore të faqes së internetit të Konsorciumit të Rrjetit Botëror ("http://w3.org"). Është kjo organizatë që zhvillon gjuhët xquery(xpath), specifikimet xhtml dhe shumë standarde të tjera të internetit.

Detyrë
Merrni informacion rreth konferencave të konsorciumit nga kodi xhtml i faqes kryesore w3.org duke përdorur pyetjet e xpath.
Le të fillojmë të shkruajmë pyetje xpath.
Kërkesa e parë për Xpath
Hapni skedën Firepath në FireBug, zgjidhni elementin që do të analizohet me përzgjedhësin, klikoni: Firepath ka krijuar një kërkesë xpath për elementin e zgjedhur.

Nëse keni zgjedhur titullin e ngjarjes së parë, atëherë kërkesa do të jetë si kjo:

Pas heqjes së indekseve të panevojshme, pyetja do të përputhet me të gjithë elementët e llojit të kokës.

Firepath thekson elementet që përputhen me pyetjen. Ju mund të shihni në kohë reale se cilat nyje dokumenti përputhen me pyetjen.

Kërkesa për informacion në lidhje me vendet e konferencave:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

Kjo është mënyra se si ne marrim një listë të sponsorëve:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

sintaksë xpath

Le të kthehemi te pyetjet që kemi krijuar dhe të kuptojmë se si janë strukturuar ato.
Le të shqyrtojmë kërkesën e parë në detaje

Në këtë pyetje kam ndarë tre pjesë për të demonstruar aftësitë e xpath. (Ndarja në pjesë është e ndërlikuar)

Pjesa e parë
.// - zbritja rekursive në zero ose më shumë nivele të hierarkisë nga konteksti aktual. Në rastin tonë, konteksti aktual është rrënja e dokumentit

Pjesa e dytë
* - çdo element,
[@id="w3c_home_upcoming_events"]– një kallëzues mbi bazën e të cilit kërkojmë një nyje që ka një atribut id të barabartë me “w3c_home_upcoming_events”. ID-të e elementeve XHTML duhet të jenë unike. Prandaj, pyetja "çdo element me një ID specifike" duhet të kthejë nyjen e vetme që po kërkojmë.

Ne mund të zëvendësojmë * tek emri i saktë i nyjës div në këtë kërkesë
div[@id="w3c_home_upcoming_events"]

Kështu, ne zbresim në pemën e dokumentit në nyjen div[@id="w3c_home_upcoming_events"] që na nevojitet. Nuk na intereson fare se nga cilat nyje përbëhet pema DOM dhe sa nivele hierarkie mbeten sipër.

Pjesa e tretë
/ul/li/div/p/a–xpath është rruga drejt një elementi specifik. Shtegu përbëhet nga hapat e adresimit dhe kushtet e kontrollit të nyjeve (ul, li, etj.). Hapat ndahen nga një karakter "/" (i pjerrët).

koleksionet xpath
Nuk është gjithmonë e mundur të aksesosh nyjen e interesit duke përdorur një kallëzues ose hapa adresimi. Shumë shpesh ka shumë nyje të të njëjtit lloj në një nivel hierarkie dhe është e nevojshme të zgjidhni nyjet "vetëm të parën" ose "vetëm të dytën". Për raste të tilla sigurohen koleksione.

Koleksionet xpath ju lejojnë të aksesoni një element sipas indeksit të tij. Indekset korrespondojnë me rendin në të cilin elementët janë paraqitur në dokumentin origjinal. Numri serial në koleksione numërohet nga një.

Bazuar në faktin se "vendi" është gjithmonë paragrafi i dytë pas "emrit të konferencës", marrim pyetjen e mëposhtme:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p
Ku p është elementi i dytë në grup për secilën nyje në listën /ul/li/div.

Në mënyrë të ngjashme, ne mund të marrim një listë të sponsorëve me kërkesën:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

Disa funksione xpath
Ka shumë funksione në xpath për të punuar me elementë brenda një koleksioni. Unë do të jap vetëm disa prej tyre.

e fundit ():
Rikthen elementin e fundit të koleksionit.
Pyetja ul/li/div/p - do të kthejë paragrafët e fundit për secilën nyje të listës "ul".
Funksioni i parë () nuk ofrohet. Për të hyrë në elementin e parë, përdorni indeksin "1".

teksti ():
Rikthen përmbajtjen e testit të një elementi.
.//a – marrim të gjitha lidhjet me tekstin “Arkivi”.

pozicioni () dhe mod:
position() - kthen pozicionin e një elementi në një grup.
mod është pjesa e mbetur e ndarjes.

Duke kombinuar këto funksione mund të marrim:
- as elementet ul/li
- elementet çift: ul/li

Operacionet Krahasuese

  • < - логическое «меньше»
  • > - logjike "më e madhe se"
  • <= - логическое «меньше либо равно»
  • >= - logjike "më e madhe se ose e barabartë"
ul/li , ul/li - listoni elementet duke filluar nga numri 3 dhe anasjelltas.

Më vete

Mundohuni të merrni:
- edhe lidhjet URL nga menyja e majtë "Standardet";
- titujt e të gjitha lajmeve, përveç të parës nga faqja kryesore e w3c.org.

Xpath në PHP5

$dom = DomDocument i ri(); $dom->loadHTML($HTMLCode); $xpath = i ri DomXPath($dom); $_res = $xpath->pyetës(".//*[@id="w3c_home_upcoming_events"]/ul/li/div/p/a"); foreach($_res => $obj) (echo "URL: ".$obj->getAttribute("href"); echo $obj->nodeValue; )

Së fundi

Duke përdorur një shembull të thjeshtë, ne pamë aftësitë e xpath për të hyrë në nyjet e faqeve të internetit.
Xpath është standardi i industrisë për aksesimin e elementeve xml dhe transformimeve xhtml, xslt.
Mund ta përdorni për të analizuar çdo faqe html. Nëse kodi burimor html përmban gabime të rëndësishme në shënim, drejtojeni atë

Sot do të hedhim një vështrim më të afërt në temën e përdorimit të XPath me PHP. Do të shihni në shembujt se si XPath redukton ndjeshëm sasinë e kodit. Le të shohim përdorimin e pyetjeve dhe funksioneve në XPath.

Në fillim do t'ju ofroj dy lloje dokumentesh: DTD dhe XML, duke përdorur të cilat do të shikojmë funksionimin e PHP DOM XPath. Ja si duken ato:

Nje liber Një autor Tmerr kapitulli nje Një Libër tjetër Një autor tjetër Fantashkencë kapitulli nje

Pyetjet themelore të XPath

Sintaksa e thjeshtë XPath ju lejon të aksesoni elementët në një dokument XML. Në mënyrën më të thjeshtë, mund të specifikoni rrugën drejt elementit të dëshiruar. Duke përdorur dokumentin XML të dhënë më sipër, pyetja e mëposhtme e XPath do të kthejë koleksionin e elementeve aktuale që gjenden në elementin e librit:

//bibliotekë/libër

Si kjo! Dy pjerrëta përpara përcaktojnë elementin rrënjë të dokumentit dhe një kalim i pjerrët përpara në elementin fëmijë të librit. Është e thjeshtë dhe e shpejtë, apo jo?

Por, çka nëse dëshironi të zgjidhni një element specifik libri nga një grup? Le të supozojmë se ju dëshironi libra nga një "Autor i caktuar". Pyetja e XPath për këtë do të ishte:

//biblioteka/libër/autor/..

ju mund të përdorni teksti () në kllapa katrore për të krahasuar vlerën e nyjës. Gjithashtu «/..» do të thotë që duam të përdorim elementin prind (d.m.th. të kthehemi një nyje më lart).

Pyetjet e XPath bëhen duke përdorur një ose dy funksione: pyetje () Dhe vlerëso (). Të dy formojnë një kërkesë, por ndryshimi është në rezultatin e kthyer. query() do të kthehet gjithmonë DOMNodeList, Ndryshe nga vlerëso () do të kthejë një rezultat teksti nëse është e mundur. Për shembull, nëse pyetja juaj e XPath do të kthente numrin e librave të shkruar nga një autor i caktuar, atëherë query() do të kthente një DOMNodeList bosh, vlerësimi () thjesht do të kthente një numër, ju mund ta përdorni këtë drejtpërdrejt për të tërhequr të dhënat nga nyja .

Kodi i XPath dhe Përfitimet e Shpejtësisë

Le të shohim një shembull të thjeshtë që do të kthejë numrin e librave të shkruar nga një autor specifik. Ne do ta shikojmë metodën e parë ashtu siç e bëjmë gjithmonë, pa përdorur XPath. Tani do të kuptoni se si ta bëni këtë pa XPath dhe sa më e lehtë është ta bëni atë me XPath.

domDocument->getElementsByTagName("autor"); foreach ($elements si $element) ( if ($element->nodeValue == $autor) ( $total++; ) ) kthen $number; )

Metoda tjetër kthen të njëjtin rezultat, por përdor XPath për të zgjedhur ato libra që janë shkruar nga një autor specifik.

domDocument); $rezultat = $xpath->pyetës($query); kthen $rezultat->length; )

Vini re se nuk kemi nevojë të rishikojmë vlerën e secilit element për të përcaktuar se cili autor e ka shkruar secilin libër. Por ne mund ta thjeshtojmë më shumë kodin duke përdorur funksionin XPath numëro () për të numëruar përmbajtjen e elementeve në këtë shteg.

domDocument); ktheni $xpath->vlerësoni ($query); )

Ne mund të marrim informacionin që na nevojitet me një kërkesë të vetme XPath. Nuk ka nevojë të krijoni shumë filtra PHP. Kjo është mënyra më e lehtë dhe më e shpejtë për të shkruar këtë funksionalitet!

Vini re se vlerësimi () u përdor në shembullin e fundit. Kjo ndodh sepse funksioni count() kthen një rezultat teksti. Përdorimi i query() do të kthejë një DOMNodeList, por do të jetë bosh.

XPath ia vlen të përdoret sepse jo vetëm që e bën kodin tuaj PHP më të thjeshtë, por gjithashtu ofron një përfitim shpejtësie. Vura re se versioni i parë ishte mesatarisht 30% më i shpejtë në krahasim me të dytin. Por e treta është 10% më e shpejtë se e para. Sigurisht, kjo varet nga serveri juaj dhe pyetjet që po përdorni. Përdorimi i XPath në formën e tij të pastër jep rezultatet më të mëdha në shpejtësinë dhe lehtësinë e shkrimit të kodit.

Funksionet e XPath

Këtu janë disa funksione që mund të përdoren me XPath. Do të gjeni gjithashtu shumë burime që detajojnë çdo veçori të disponueshme. Nëse keni nevojë të llogaritni DOMNodeList ose të krahasoni nodeValue (vlera e nyjes), mund të gjeni një funksion të përshtatshëm XPath që eliminon përdorimin e kodit të panevojshëm PHP.

Ju tashmë e dini këtë nga shembulli i funksionit count(). Le të përdorim funksionin id() për të marrë titujt e librave me ISBN-të e dhëna. Për ta bërë këtë, duhet të përdorni shprehjen e mëposhtme XPath:

id("isbn1234 isbn1235")/titull

Vini re se vlerat që kërkoni nuk duhet të mbyllen në kllapa, thjesht të ndahen me hapësira. Gjithashtu, as mos mendoni të shtoni një presje:

domDocument); $rezultat = $xpath->pyetës($query); $libra = grup(); foreach ($rezultat si $nyje) ( $book = grup ("title" => $booknode->nodeValue); $books = $libër; ) kthen $books; )

Trajtimi i funksioneve komplekse në XPath është tepër i thjeshtë.

Përdorimi i funksioneve PHP me XPath

Ndonjëherë do t'ju duhet më shumë funksionalitet që funksionet standarde XPath nuk mund të ofrojnë. Për fat të mirë, PHP DOM lejon funksionet vendase PHP të ndërveprojnë me pyetjet e XPath.

Le të shohim një shembull që kthen numrin e fjalëve në titullin e një libri. Në këtë funksion më të thjeshtë, ne do të shkruajmë sa vijon:

domDocument); $rezultat = $xpath->pyetës($query); $title = $result->item(0)->getElementsByTagName("title") ->item(0)->nodeValue; kthej str_fjalë_count ($titull); )

Por, ne gjithashtu mund të përfshijmë funksionin str_word_count() direkt në kërkesën XPath. Kjo mund të bëhet në disa hapa. Para së gjithash, ne duhet të regjistrojmë hapësirën e emrave me një objekt XPath. Funksionet PHP në kërkesat XPath thirren duke përdorur vargun "php:functionString", pas së cilës shkruhet emri i funksionit të dëshiruar. Gjithashtu, hapësira e emrave diskutohet më në detaje në http://php.net/xpath. Vlerat e tjera të hapësirës së emrave do të sjellin një gabim. Pas kësaj duhet të thërrasim registerPHPFunctions(). Ky funksion i tregon PHP-së se kur bëhet një telefonatë përmes hapësirës së emrave "php:", PHP do ta trajtojë këtë thirrje.

Një shembull i sintaksës për thirrjen e funksioneve do të ishte:

php:functionString ("nameoffunction", arg, arg...)

Le t'i bashkojmë të gjitha në shembullin e mëposhtëm të funksionit getNumberOfWords():

domDocument); //regjistroni hapësirën e emrave php $xpath->registerNamespace("php", "http://php.net/xpath"); //tani funksionet php mund të thirren në kërkesat xpath $xpath->registerPHPFunctions(); $query = "php:functionString("str_word_count",(//biblioteka/libri[@isbn = "$isbn"]/titulli)"; ktheni $xpath->vlerësoni ($query); )

Vini re se nuk keni nevojë të thërrisni funksionin XPath text() për të marrë tekstin e nyjës. Metoda registerPHPFunctions() e bën këtë automatike. Megjithëse, linja e mëposhtme e kodit të shembullit do të jetë gjithashtu e vlefshme:

php:functionString("str_word_count",(//biblioteka/libër[@isbn = "$isbn"]/titulli))

Regjistrimi i funksioneve PHP nuk kufizohet vetëm në funksionet që përfshihen në PHP. Ju mund të përcaktoni funksionet tuaja dhe t'i përdorni ato brenda XPath. I vetmi ndryshim është se do të duhet të përdorni "php:function" në vend të "php:functionString".

Le të shkruajmë një funksion jashtë klasës për të demonstruar funksionalitetin bazë. Funksioni që do të përdorim na kthen librat e autorit “George Orwell”. Duhet të kthehet e vërtetë për çdo nyje që dëshironi të përfshini në pyetje.

nodeValue == "(! GJUHË:George Orwell"; } !}

Argumenti që i kalohet funksionit është një grup elementesh DOM. Ky funksion kalon nëpër grup dhe përcakton elementët e nevojshëm, dhe më pas i përfshin ato në DOMNodeList. Në këtë shembull, nyja që po testohej ishte /book, dhe ne përdorëm gjithashtu /author për të përcaktuar elementët e kërkuar.

Tani mund të krijojmë funksionin getGeorgeOrwellBooks():

domDocument); $xpath->registerNamespace("php", "http://php.net/xpath"); $xpath->registerPHPFunctions(); $query = "//biblioteka/libri1"; $rezultat = $xpath->pyetës($query); $libra = grup(); foreach($rezultat si $nyje) ( $books = $node->getElementsByTagName("title") ->item(0)->nodeValue; ) ktheje $libra; )

Nëse funksioni compare() është statik, atëherë ju duhet të ndryshoni pyetjen XPath:

//bibliotekë/libër

Për të qenë i sinqertë, i gjithë ky funksionalitet mund të ishte zbatuar duke përdorur kodin e pastër XPath. Por shembulli tregon se si mund t'i zgjeroni pyetjet e XPath dhe t'i bëni ato më komplekse.

Në përfundim

XPathështë një mënyrë e shkëlqyer për të reduktuar sasinë e kodit dhe për të rritur përpunimin e tij kur punoni me XML. Funksionaliteti shtesë PHP DOM ju lejon të zgjeroni funksionet XPath. Kjo është një gjë vërtet e dobishme, nëse e përdorni dhe gërmoni në specifikat, do t'ju duhet të shkruani gjithnjë e më pak kod.


XPath përdor shprehjet e rrugës për të zgjedhur nyjet në një dokument XML ose një grup nyjesh. Nga nyja përgjatë shtegut (shtegut) ose fazës (hapave) deri në atë të zgjedhur.

shembull dokumentet XML

Ne do ta përdorim këtë dokument XML në shembujt e mëposhtëm.


Harry Potter
29.99


Mësimi i XML
39.95

Zgjidhni nyjen

XPath përdor shprehjet e rrugës për të zgjedhur nyjet në një dokument XML. Ose përgjatë shtegut përmes një nyje për të zgjedhur një hap. Më poshtë janë shprehjet më të dobishme të rrugës:

Në tabelën e mëposhtme tregojmë disa nga shtigjet e shprehjes dhe rezultatin e shprehjes:

shprehje Rrugarezultat
Dyqan librashZgjidhni të gjitha nyjet fëmijë të elementit të librit.
/ Librari

Zgjidhni librarinë e elementit rrënjë.

Shënim: Nëse një shteg fillon me një vijë të pjerrët (/), shtegu është gjithmonë përfaqësues i shtegut absolut të elementit!

librari/libërZgjidhni nënartikujt që i përkasin librarisë të gjithë artikujt e librave.
// LibërZgjidhni të gjithë nënelementet e librit, pavarësisht nga pozicioni i tyre në dokument.
librari // libërZgjedh të gjithë elementët e librit që nuk janë pasardhës të librarisë së elementit, pavarësisht nga pozicioni i tyre brenda dhe nën librari.
// @LangZgjidhni të gjitha pronat me emrin Lang.

Kallëzues(t)

Një kallëzues përdoret për të gjetur një nyje ose nyje specifike që përmban vlerën e specifikuar.

Kallëzuesi është i mbyllur në kllapa katrore.

Në tabelën e mëposhtme, ne kemi renditur disa shprehje të rrugës me kallëzues dhe rezultatin e shprehjes:

shprehje Rrugarezultat
/ Librari / libërZgjidhni nënelementet që i përkasin elementit të parë të librit të punës.
/Librari/libër [i fundit()]Zgjidhni nën-elementet që i përkasin elementit të librit të fundit.
/ Librari / libri [i fundit () - 1]Zgjidhni nën-artikujt që lidhen me librarinë e përbashkët të artikullit të dytë të librit.
/Librari/libër [pozicion()<3] Zgjidhni dy elementët e parë të librit të elementit të librit që i përkasin nënelementeve.
// Titulli [@lang]Zgjidh të gjithë atributin e quajtur Lang ka një titull elementi.
// Titulli [@ LANG = "eng"]Zgjidhni të gjithë emrat e elementeve dhe këta elementë kanë vlerën e atributit në anglisht.
/librari/libërZgjidhni të gjithë elementët e librit të elementit të librit dhe vlerën e elementit të çmimit, i cili duhet të jetë më i madh se 35,00.
/librari/libër/titullZgjidhni të gjithë elementët e kokës së elementit të librit të elementit të librit dhe në të cilët vlera e elementit të çmimit duhet të jetë më e madhe se 35,00.

Zgjidhni nyjet e panjohura

Shenjat e XPath mund të përdoren për të zgjedhur elementë të panjohur XML.

Në tabelën e mëposhtme, ne kemi renditur disa shprehje të rrugës, si dhe rezultatet e këtyre shprehjeve:

Zgjidhni shtigje të shumta

Duke përdorur shprehjen e rrugës "|" operator, ju mund të zgjidhni disa shtigje.

Në tabelën e mëposhtme, ne kemi renditur disa shprehje të rrugës si dhe rezultatet e këtyre shprehjeve.