XPath

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
XPath
limbaj de programare
Diagrama Sederhana XPath.png
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:

  1. Sintaxă scurtă, compactă, care permite crearea unor construcții intuitive și ușor de realizat;
  2. 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 caz fisso , cellulare și fax .
/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ă în account .
string(descendant::nome[1])
returnează valoarea șirului elementului prenumelui pe care îl întâlnește, în acest caz Fabio V. ..

Alte proiecte

linkuri externe

Controlul autorității LCCN (EN) sh2002000754 · GND (DE) 4613223-5 · BNF (FR) cb158976144 (data)
Internet Portal internet : accesați intrările Wikipedia care se ocupă de internet