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:
Shembuj të nyjeve në dokumentin XML më sipër:
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:
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:
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:
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ë:
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":
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.
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.
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:
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ë"
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:
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.
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 Rruga | rezultat |
---|---|
Dyqan librash | Zgjidhni 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ër | Zgjidhni nënartikujt që i përkasin librarisë të gjithë artikujt e librave. |
// Libër | Zgjidhni të gjithë nënelementet e librit, pavarësisht nga pozicioni i tyre në dokument. |
librari // libër | Zgjedh 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. |
// @Lang | Zgjidhni 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 Rruga | rezultat |
---|---|
/ Librari / libër | Zgjidhni 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ër | Zgjidhni 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/titull | Zgjidhni 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.