XPath

XPath
programmeringsspråk
ForfatterW3C
Opprinnelsesdato1999
Siste versjon3.0
BrukSpørrespråk
Paradigmermultiparadigme
SkrivingSom XML

I informatikk er XPath et språk, en del av XML -familien , som lar deg identifisere noder i et XML-dokument. XPath-uttrykk, i motsetning til XML-uttrykk, brukes ikke til å identifisere strukturen til et dokument, men for å lokalisere nodene nøyaktig.

XPath ble opprinnelig født av behovet for å gi en felles syntaks og oppførsel mellom XPointer og XSL ; først senere ble det tatt i bruk av utviklere som en metode for å søke etter data i XML-format. XPath versjon 1.0 ble en W3C- standard 16. november 1999 .

Notasjon

Den vanligste typen XPath-uttrykk (og den som ga opphav til navnet) er baneuttrykket. Et stiuttrykk skrives som en sekvens av trinn for å nå en XML-node, med start fra den gjeldende noden ("relativ" bane). Alternativt er det mulig å bruke "absolutte" baner ved å bruke roten til dokumentet som referanse. Elementer er atskilt med tegnet '/'. Hvert element har tre komponenter:

To notasjoner er definert:

  1. Forkortet, kompakt syntaks, som gjør det mulig å lage intuitive og lett oppnåelige konstruksjoner;
  2. Komplett syntaks, mer kompleks, som inneholder flere alternativer, i stand til å spesifisere elementene mer spesifikt.

Forkortet syntaks

Stenografinotasjonen tillater mange forskjellige syntakser for vanlige tilfeller. Den enkleste XPath har en form som dette:

som velger elementene til C som er barn av B-elementene som er barn av A-elementet som representerer roten til XML-dokumentet. XPath-syntaksen ble designet for å etterligne Uniform Resource Identifier (URI)-syntaksen og den som brukes til å indikere filer eller kataloger i filsystemer.

Mer komplekse uttrykk kan konstrueres ved å spesifisere en annen akse enn et enkelt navn eller predikat, som kan skrives i hakeparenteser etter hele uttrykket. For eksempel:

velger det første elementet ("[1]"), underordnet av B, uavhengig av navnet, og uavhengig av antall noder mellom A og B (//). Merk at uttrykket ikke starter med "/", så A er en node for gjeldende kontekst.

Utvidet syntaks

I full syntaks vil de to eksemplene ovenfor være skrevet:

I dette tilfellet, ved hvert punkt av XPath, er aksen (f.eks. barn eller etterkommer-eller-selv) eksplisitt spesifisert, etterfulgt av :: og igjen etterfulgt av nodetesten, slik som A eller node () i eksemplene ovenfor .

Akse

Aksen angir kjøreretningen til XML-dokumenttreet. Den tilgjengelige aksen, i fullstendig og forkortet syntaks, er:

barn standard, ikke spesifisert i den forkortede syntaksen Egenskap @ etterkommer ikke tilgjengelig i forkortet syntaks etterkommer-eller-selv // forelder .. stamfar ikke tilgjengelig i forkortet syntaks stamfar-eller-selv ikke tilgjengelig i forkortet syntaks følgende ikke tilgjengelig i forkortet syntaks foregående ikke tilgjengelig i forkortet syntaks følgende søsken ikke tilgjengelig i forkortet syntaks forrige søsken ikke tilgjengelig i forkortet syntaks selv- . navneområde ikke tilgjengelig i forkortet syntaks

Ved å bruke følgende stenografisyntaks //a/@hrefvelger du for eksempel et navngitt attributt hrefi et hvilket som helst element i dokumenttreet. Akse selfbrukes oftest for å referere til den valgte noden. Velg for eksempel h3[.='See also']et element som er navngitt h3i gjeldende kontekst, hvis tekst er lik "Se også".

Nodetest

Node-tester kan sjekke spesifikke nodenavn eller mer generelle uttrykk. I tilfellet med et XML-dokument der navneromsprefikset gser definert, //gs:enquiryvil det finne alle nodene enquirytil det navnerommet.

Andre node-tester er:

kommentar () finne en XML-kommentarnode, for eksempel<!-- Commento --> tekst () finner en node av typen tekst, for eksempel helloi<k>hello</k> behandlingsinstruksjon () finne XML-behandlingsinstruksjoner som <?php echo $a;?>. I dette tilfellet ('php'). node () finne knuten.

Predikater

Uttrykk for enhver enhet kan angis i hakeparenteser, som må være oppfylt for at noden skal vurderes. For eksempel //a[@href='help.php']vil det matche et element med et attributt hrefhvis verdi er help.php. Det er ingen grense for antall predikater, og de må ikke begrenses til det siste elementet i et XPath-uttrykk. De kan også nestes. Banene spesifisert i predikatene vil referere til konteksten til det relevante punktet (det vil si den rett før nodetesten).

//a[@href='help.php'][../div/@class='header']/@targetvil velge målattributtverdien til et element a, hvis elementet har et attributt som hrefverdien er help.phpog hvis overordnet er et element som har et divverdiattributtclassheader

Funksjoner og operatorer

XPath 1.0 definerer fire typer data: nodesett (sett med noder uten egenrekkefølge), strenger, tall og booleaner.

De tilgjengelige operatørene er:

Funksjonsbiblioteket inkluderer:

Noen av de mer vanlige funksjonene er beskrevet nedenfor. For en fullstendig beskrivelse, se W3C-referansedokumentet

Funksjoner på noder

stilling () returnerer et tall som representerer posisjonen til denne noden i forhold til søsken fra XPath på dette tidspunktet. telle (nodesett) returnerer antall noder som samsvarer med den relevante forespørselen

Stringmanipulasjonsfunksjoner

streng (objekt?) konverterer hver av XPaths fire datatyper til en streng. Argumentet kan være en XPath, i så fall blir de matchede nodene konvertert til en streng. concat (streng, streng, streng *) setter sammen alle strenger. inneholder (s1, s2) returnerer sant hvis s1 inneholder s2. normalisere-mellomrom (streng?) alle mellomrom på begynnelsen og slutten fjernes, og alle mellomromssekvenser erstattes av et enkelt mellomrom. Det er veldig nyttig når den originale XML-en må være godt formatert, i stand til ytterligere pålitelig behandling av strengen.

Boolske funksjoner

ikke (boolsk) negerer alle boolske uttrykk .

Numeriske funksjoner

sum (nodesett) Konverterer strengverdiene til alle funne noder til tall, og returnerer deretter summen av disse tallene.

Uttrykk kan genereres ved hjelp av operatorene: =, !=, <=, <, >=og >. Boolske uttrykk kan slås sammen med parenteser ()og kombineres med boolske operatorer andog or. not()Numeriske beregninger kan bruke *, +, -, divog mod. Strenger kan bestå av alle Unicode-tegn.

Innenfor eller utenfor predikatene kan hele nodesett settes sammen ved å bruke tegnet | ("rør").

v[x or y] | w[z]vil returnere et enkelt nodesett med alle elementer vsom har elementer som underordnede yeller x, sammen med alle elementer wsom har underordnede z, funnet i gjeldende kontekst.

//item[@price > 2*@discount]velger de itemhvis attributt priceer større enn det dobbelte av attributtverdien discount.

Praktiske eksempler

La oss nå analysere et enkelt XML-dokument for bedre å forstå hvordan du får tilgang til dataene det inneholder.

<? xml versjon = "1.0"?> <brukerlister> <kontobruker = "fabio" > <mail> [email protected] </mail> <navn> Fabio V. </name> <main> <adresse> < via> Via Vai 1 </via> <cap> 98100 </cap> <citta> Messina </citta> </address> <telefoni> <fisso> 090123456 </fisso> <mobile phone manager = "aaa" > 3001234567 < / mobiltelefon> </telefoni> </principale> <altrirecapiti> <office> <adresse> <via> Via di Qua, 2 </via> <cap> 98100 </cap> <citta> Messina </citta > </ adresse> <telefoni> <fisso> 09078901 </fisso> <fax> 3001234567 </fax> </telefoni> </office> </altrirecapiti> </account> </listautenti> /listautenti/account//telefoni/* returnerer listen over alle noder i noden telefoni, i dette tilfellet fisso, cellulareog fax. /listautenti/account//indirizzo/.. returnerer alle nodene som inneholder en node indirizzoinne i dem, bruk av Axis //betyr at noder på forskjellige nivåer også identifiseres så lenge de er inne account. string(descendant::nome[1]) returnerer strengverdien til fornavnselementet det møter, i dette tilfellet Fabio V..

Andre prosjekter

Eksterne lenker