Patru tipuri de căi de locație XPath
Există două distincții diferite pentru a separa diferite căi de locație: neabreviat vs. abreviat și relativ vs. absolut. Combinarea acestor două concepte ar putea fi utilă atunci când vorbim despre căile de locație XPath. Ca să nu mai vorbim că te-ar putea face să pari foarte inteligent în fața prietenilor tăi când spui lucruri precum:
- Căi de locație relativă abreviată – Utilizarea sintaxei abreviate în timp ce se specifică o cale relativă.
- Căi de locație absolută abreviată – Utilizarea sintaxei abreviate în timp ce se specifică o cale absolută.
- Căi de locație relativă neabreviată – Utilizarea sintaxei neabreviate în timp ce se specifică o cale relativă.
- Căi de locație absolută neabreviate – Utilizarea sintaxei neabreviate în timp ce se specifică o cale absolută.
Menționez doar această distincție în patru căi acum, deoarece ar putea fi utilă în timp ce citești specificația sau alte texte despre subiect.
Axele XPath
În XPath, există câteva selecții de noduri a căror performanță necesită sintaxa neabreviată. În acest caz, veți folosi o axă pentru a specifica fiecare pas de locație pe calea locației.
Din orice nod din arbore, există 13 axe de-a lungul cărora puteți păși. Acestea sunt după cum urmează:
Axe | Sens |
---|---|
ancestor:: | Părinți ai nodului curent până la nodul rădăcină |
ancestor-sau-self:: | Părinți ai nodului curent până la nodul rădăcină și nodul curent |
attribute:: | Atributele nodului curent |
child:: | Copiii imediați ai nodului curent |
descendant:: | Copii ai nodului curent (inclusiv copiii copiilor) |
descendant-sau-self:: | Copii nodului curent (inclusiv copiii copiilor) și nodul curent |
following:: | Nodurile după nodul curent (excluzând copiii) |
following-sibling:: | Noduri după nodul curent (cu excepția copiilor) la același nivel |
namespace:: | Spațiu de nume XML al nodului curent |
parent:: | Părinte imediat al nodului curent |
preceding:: | Noduri înaintea nodului curent (cu excepția copiilor) |
preceding-sibling:: | Noduri înainte de nodul curent (excluzând copiii) la același nivel |
self:: | Nodul curent |
Predicate și funcții XPath
Uneori, este posibil să doriți să utilizați un predicat într-o cale de locație XPath pentru a filtra în continuare selecția. În mod normal, veți obține un set de noduri dintr-o cale de locație. Un predicat este o expresie mică, care este evaluată pentru fiecare nod dintr-un set de noduri. Dacă expresia este „falsă”, atunci nodul nu este inclus în selecție. Un exemplu este următorul:
//p[@class=‘alert’]
În exemplul precedent, fiecare etichetă <p> din document este verificată pentru a vedea dacă atributul său „class” este setat la „alert”. Doar acele etichete <p> cu un atribut „class” cu valoarea „alert” sunt incluse în setul de noduri pentru această cale de locație.
Următorul exemplu utilizează o funcție, care poate fi folosită într-un predicat pentru a obține informații despre nodul context.
/book/chapter[position()=3]
Acest exemplu dinainte selectează doar capitolul cărții din a treia poziție. Deci, pentru ca ceva să fie returnat, elementul curent <book> trebuie să aibă cel puțin 3 elemente <chapter>.
De asemenea, observați că funcția de poziție returnează un număr întreg. Există multe funcții în specificația XPath. Pentru o listă completă, consultați specificația W3C la http://www.w3.org/TR/xpath#corelib
Iată câteva funcții suplimentare care pot fi utile:
number last() – ltimul nod din setul de noduri curent
number position() – poziția nodului de context testat
number count(node-set) – numărul de noduri dintr-un set de noduri
boolean starts-with(string, string) – returnează adevărat dacă primul argument începe cu al doilea
boolean contains(string, string) – returnează adevărat dacă primul argument îl conține pe al doilea
number sum(node-set) – suma valorilor numerice ale nodurilor din setul de noduri
number floor(number) – numărul, rotunjit în jos la cel mai apropiat număr întreg
number ceiling(number) – numărul, rotunjit în sus la cel mai apropiat număr întreg
number round(number) – numărul, rotunjit la cel mai apropiat număr întreg
(Include texte din Wikibooks traduse și adaptate de Nicolae Sfetcu)
Lasă un răspuns