XPath programmeringsspråk | |
---|---|
Forfatter | W3C |
Opprinnelsesdato | 1999 |
Siste versjon | 3.0 |
Bruk | Spørrespråk |
Paradigmer | multiparadigme |
Skriving | Som 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 .
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:
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.
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 .
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 syntaksVed å 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å".
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.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
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
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.
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..