XPath
XPath limbaj de programare | |
---|---|
Autor | W3C |
Data de origine | 1999 |
Ultima versiune | 3.0 |
Utilizare | Limbajul interogării |
Paradigme | multiparadigm |
Tastare | Ca XML |
În informatică XPath este un limbaj, parte a familiei XML , care vă permite să identificați nodurile dintr-un document XML. Expresiile XPath, spre deosebire de expresiile XML, nu sunt utilizate pentru a identifica structura unui document, ci pentru a localiza nodurile acestuia cu precizie.
XPath s-a născut inițial din necesitatea de a oferi o sintaxă și un comportament comune între XPointer și XSL ; abia mai târziu a fost adoptată de dezvoltatori ca metodă de interogare a datelor în format XML. Versiunea XPath 1.0 a devenit un standard W3C pe 16 noiembrie 1999 .
Notaţie
Cel mai comun tip de expresie XPath (și cel care a dat naștere numelui său) este expresia căii. O expresie de cale este scrisă ca o secvență de pași pentru a ajunge la un nod XML, începând de la nodul curent (calea „relativă”). Alternativ, este posibil să se utilizeze căi „absolute” folosind rădăcina documentului ca referință. Elementele sunt separate prin caracterul „/”. Fiecare element are trei componente:
- Specificatorul axei
- Testul nodului
- Predicat
Au fost definite două notații:
- Sintaxă scurtă, compactă, care permite crearea unor construcții intuitive și ușor de realizat;
- Sintaxă completă, mai complexă, care conține mai multe opțiuni, capabile să specifice elementele cu mai multă particularitate.
Sintaxă scurtată
Notarea pe scurt utilizează sintaxe diferite pentru cazuri obișnuite. Cel mai simplu XPath are o formă ca aceasta:
-
/A/B/C
care selectează elementele lui C care sunt copii ale elementelor B care sunt copii ale elementului A reprezentând rădăcina documentului XML. Sintaxa XPath a fost concepută pentru a imita sintaxa Uniform Resource Identifier (URI) și cea utilizată pentru a indica fișiere sau directoare în sistemele de fișiere.
Expresiile mai complexe pot fi construite prin specificarea unei alte Axe decât un nume simplu sau un predicat, care poate fi scris între paranteze drepte după întreaga expresie. De exemplu:
-
A//B/*[1]
selectează primul element („[1]”), copil al lui B, indiferent de numele acestuia și indiferent de numărul de noduri dintre A și B (//). Rețineți că expresia nu începe cu „/”, deci A este un nod al contextului curent.
Sintaxă extinsă
În sintaxă completă, cele două exemple de mai sus ar fi scrise:
-
/child::A/child::B/child::C
-
child::A/descendant-or-self::B/child::node()[1]
În acest caz, în fiecare punct al XPath-ului, Axa (de exemplu, copil sau descendent-sau-sine) este specificată în mod explicit, urmată de :: și din nou urmată de testul nodului, cum ar fi A sau nodul () din exemplele de mai sus .
Axă
Axa indică direcția de deplasare a arborelui documentului XML. Axele disponibile, în sintaxă completă și prescurtată, sunt:
- copil
- implicit, nespecificat în sintaxa prescurtată
- atribut
- @
- descendent
- nu este disponibil în sintaxă
- descendent-sau-sine
-
//
- mamă
-
..
- strămoş
- nu este disponibil în sintaxă
- strămoș-sau-sine
- nu este disponibil în sintaxă
- ca urmare a
- nu este disponibil în sintaxă
- precedent
- nu este disponibil în sintaxă
- următor-frate
- nu este disponibil în sintaxă
- precedent-frate
- nu este disponibil în sintaxă
- de sine
-
.
- spațiu de nume
- nu este disponibil în sintaxă
De exemplu, folosind următoarea sintaxă prescurtată, //a/@href
selectați un atribut numit href
în orice element al documentului. Axis self
este cel mai frecvent utilizat pentru a se referi la nodul selectat în prezent. De exemplu, h3[.='See also']
selectează un element numit h3
în contextul curent, al cărui text este egal cu „See also”.
Testul nodului
Testele nodurilor pot verifica nume specifice de noduri sau expresii mai generale. În cazul unui document XML în care a fost definit prefixul gs
al spațiului de nume, //gs:enquiry
va găsi toate nodurile de enquiry
ale acelui spațiu de nume.
Alte teste nodulare sunt:
- cometariu ()
- găsiți un nod de comentariu XML, de exemplu
<!-- Commento -->
- text ()
- găsiți un nod de tip text, de exemplu
hello
în<k>hello</k>
- procesare-instruire ()
- găsește instrucțiuni de procesare XML precum
<?php echo $a;?>
. În acest caz („php”). - nod ()
- găsește nodul.
Predicati
Expresiile oricărei entități pot fi indicate între paranteze drepte, care trebuie satisfăcute pentru ca nodul să fie luat în considerare. De exemplu //a[@href='help.php']
, care va potrivi un element cu un atribut href
cărui valoare este help.php
. Nu există nicio limită la numărul de predicate și acestea nu trebuie să fie limitate la ultimul element al unei expresii XPath. De asemenea, pot fi imbricate. Căile specificate în predicate vor face referire la contextul punctului relevant (adică cel imediat înainte de testul nodului).
//a[@href='help.php'][../div/@class='header']/@target
va selecta valoarea țintei unui element a
, dacă elementul are un atribut href
al cărui valoarea este help.php
și dacă părintele este un element div
care are un atribut de class
al header
valorii
Funcții și operatori
XPath 1.0 definește patru tipuri de date: set de noduri (seturi de noduri fără ordine intrinsecă), șiruri, numere și booleeni.
Operatorii disponibili sunt:
- Operatorii "/", "//" și [...] utilizați în expresiile de cale, așa cum s-a descris anterior.
- Un operator de uniune, "|", care formează uniunea a două seturi de noduri.
- Operatori booleeni "și" și "sau" și funcția "not ()".
- Operatori aritmetici "+", "-", "*", "div" și "mod".
- Operatori de comparație "=", "! =", "<", ">", "<=", "> =".
Biblioteca de funcții include:
- Funcții pentru manipularea șirurilor: concat (), substring (), conține (), substring-before (), substring-after (), translate (), normalize-space (), string-length ()
- Funcții pentru manipularea numerelor: sumă (), rotundă (), podea (), tavan ()
- Funcții pentru a accesa proprietățile nodului: nume (), nume-local (), spațiu de nume-uri ()
- Funcții pentru accesarea informațiilor despre contextul nodului: poziția (), ultimul ()
- Funcții de conversie de tip: șir (), număr (), boolean ()
Unele dintre funcțiile mai comune sunt detaliate mai jos. Pentru o descriere completă, consultați documentul de referință W3C
Funcții pe noduri
- poziție ()
- returnează un număr care reprezintă poziția acestui nod față de frații săi din XPath în acest moment.
- număr (set de noduri)
- returnează numărul de noduri care corespund cererii relevante
Funcții pentru manipularea șirurilor
- șir (obiect?)
- convertește fiecare dintre cele patru tipuri de date XPath într-un șir. Argumentul poate fi un XPath, caz în care nodurile potrivite sunt convertite într-un șir.
- concat (șir, șir, șir *)
- concatenează toate șirurile.
- conține (s1, s2)
- returnează adevărat dacă s1 conține s2.
- normalize-space (șir?)
- toate spațiile albe de la început și sfârșit sunt eliminate și toate secvențele albe sunt înlocuite cu un singur spațiu. Este foarte util atunci când XML-ul original trebuie să fie bine formatat, capabil să proceseze în continuare fiabil șirul.
Funcții booleene
- nu (boolean)
- neagă toată expresia booleană .
Funcții numerice
- sumă (set de noduri)
- Convertește valorile șirurilor tuturor nodurilor găsite în numere, apoi returnează suma acestor numere.
Expresiile pot fi generate folosind operatorii: =, !=, <=, <, >=
Și >
. Expresiile booleene pot fi unite cu paranteze ()
și combinate cu operatori booleeni and
, or
și not()
. Calculele numerice pot utiliza *, +, -, div
și mod
. Șirurile pot consta din toate caracterele Unicode.
În interiorul sau în afara predicatelor, seturi întregi de noduri pot fi unite folosind caracterul | („țeavă”).
v[x or y] | w[z]
returna un singur set de noduri cu toate elementele lui v
având elemente y
sau x
ca copii, împreună cu toate elementele lui w
având z
copii, găsite în contextul actual.
//item[@price > 2*@discount]
selectează item
al căror atribut de price
este mai mare decât dublul valorii atributului de discount
.
Exemple practice
Să analizăm acum un document XML simplu pentru a înțelege mai bine cum să accesați datele pe care le conține.
<? xml version = "1.0"?>
<listă de utilizatori>
<account user = "fabio" >
<mail> [email protected] </mail>
<nume> Fabio V. </nume>
<principal>
<adresa>
<via> Via Vai 1 </via>
<cap> 98100 </cap>
<citta> Messina </citta>
</adresa>
<telefoane>
<fix> 090123456 </fix>
<telefon mobil manager = "aaa" > 3001234567 </cellular>
</telefoni>
</main>
<alte detalii de contact>
<office>
<adresa>
<via> Via di Qua, 2 </via>
<cap> 98100 </cap>
<citta> Messina </citta>
</adresa>
<telefoane>
<fix> 09078901 </fix>
<fax> 3001234567 </fax>
</telefoni>
</office>
</altrirecapiti>
</account>
</listautenti>
/listautenti/account//telefoni/*
- returnează lista tuturor nodurilor din nodul
telefoni
, în acest cazfisso
,cellulare
șifax
. -
/listautenti/account//indirizzo/..
- returnează toate nodurile care conțin un nod de
indirizzo
în interiorul lor, utilizarea Axis//
înseamnă că nodurile de diferite niveluri sunt, de asemenea, identificate atât timp cât se află înaccount
. -
string(descendant::nome[1])
- returnează valoarea șirului elementului prenumelui pe care îl întâlnește, în acest caz
Fabio V.
..
Alte proiecte
- Wikibooks conține texte sau manuale XPath
- Wikimedia Commons conține imagini sau alte fișiere pe XPath
linkuri externe
- (EN) Recomandarea XPath W3C , pe w3.org.
- (RO) Tutorial XPath pe data2type.de.
- ( EN ) Online XPath Tester (gratuit) , pe codebeautify.org .
Controlul autorității | LCCN (EN) sh2002000754 · GND (DE) 4613223-5 · BNF (FR) cb158976144 (data) |
---|