Con la dif­fu­sio­ne dell'XML come lin­guag­gio di markup per lo scambio di dati in­di­pen­den­te dalla piat­ta­for­ma, è cresciuta la necessità di uno standard che consenta ad ap­pli­ca­zio­ni non basate su XML di in­ter­ro­ga­re questi documenti.

N.B.

L'Ex­ten­si­ble Markup Language (XML) è un lin­guag­gio di markup uti­liz­za­to per vi­sua­liz­za­re dati strut­tu­ra­ti ge­rar­chi­ca­men­te sotto forma di testo. L'XML è ugual­men­te leggibile sia per l'uomo che per le macchine e viene uti­liz­za­to, tra l'altro, nel World Wide Web per lo scambio di dati tra due sistemi in­for­ma­ti­ci.

Gli standard cor­ri­spon­den­ti per l'accesso pro­gram­ma­ti­co ai documenti XML sono stati svi­lup­pa­ti dal Consorzio W3 con XQuery e XSLT e for­ni­sco­no in­ter­fac­ce di pro­gram­ma­zio­ne che le ap­pli­ca­zio­ni possono uti­liz­za­re per accedere, in­ter­ro­ga­re o tra­sfor­ma­re documenti XML. Il pre­re­qui­si­to è uno standard che consente l'in­di­riz­za­men­to di elementi in documenti XML, ovvero il lin­guag­gio XPath.

Vi pre­sen­tia­mo il modello di dati XPath (XDM) e la sintassi alla base delle espres­sio­ni XPath per lo­ca­liz­za­re gli elementi XML.

Registra il tuo dominio
  • Domain Connect gratuito per una con­fi­gu­ra­zio­ne facile del DNS
  • Cer­ti­fi­ca­to SSL Wildcard gratuito
  • Pro­te­zio­ne privacy inclusa

Che cos'è XPath?

L'XML Path Language (XPath) è un lin­guag­gio di in­ter­ro­ga­zio­ne per documenti XML, svi­lup­pa­to dal consorzio W3. XPath fornisce agli utenti una sintassi non basata su XML che permette loro di in­di­riz­za­re gli elementi di un documento XML in modo mirato.

Di norma, XPath è integrato in un lin­guag­gio host, che consente di elaborare gli elementi XML in­di­riz­za­ti. XQuery, per esempio, è usato per in­ter­ro­ga­re elementi XML in­di­riz­za­ti da XPath. XSLT utilizza il lin­guag­gio di in­ter­ro­ga­zio­ne per tra­sfor­ma­re i documenti XML.

  • XPath: na­vi­ga­zio­ne in documenti XML
  • XQuery: in­ter­ro­ga­zio­ni su documenti XML
  • XSLT: tra­sfor­ma­zio­ne di documenti XML

Nella rac­co­man­da­zio­ne del W3C del 21 marzo 2017 è spe­ci­fi­ca­ta la versione attuale di XPath 3.1.

N.B.

No­no­stan­te l'ul­te­rio­re sviluppo, molti pro­ces­so­ri XSLT, browser web e ap­pli­ca­zio­ni con­ti­nua­no a sup­por­ta­re soltanto lo standard XPath 1.0 del 1999.

Come funziona XPath?

XPath si basa su un modello di dati che in­ter­pre­ta i documenti XML come una sequenza di elementi disposti in una struttura ad albero. La struttura ad albero del modello di dati XPath è simile a quella del Document Object Model (DOM), che funge da in­ter­fac­cia tra l'HTML e il Ja­va­Script dinamico nel browser web.

La lo­ca­liz­za­zio­ne degli elementi XML si basa sul sistema di directory Unix sotto forma di percorsi. I com­po­nen­ti di base di questi percorsi di lo­ca­liz­za­zio­ne sono i nodi, gli assi, i test di nodo e i predicati.

Tipi di nodi

I singoli elementi di una struttura ad albero XPath sono chiamati nodi. I nodi sono ordinati sia in base alla sequenza del documento che al­l'an­ni­da­men­to degli elementi XML.

Il modello di dati XPath distingue sette tipi di nodi con funzioni diverse:

  • Nodo elemento (element node)
  • Nodo documento (root node) (in XPath 2.0 e versioni suc­ces­si­ve, pre­ce­den­te­men­te nodo radice)
  • Nodo attributo (attribute node)
  • Nodo testo (text node)
  • Nodo namespace (namespace node)
  • Nodo istru­zio­ne di ela­bo­ra­zio­ne (pro­ces­sing in­struc­tion node)
  • Nodo commento (comment node)

Il­lu­stre­re­mo i tipi di nodi del modello di dati XPath uti­liz­zan­do un esempio. Il seguente documento XML viene uti­liz­za­to per lo scambio di dati nel­l'am­bi­to di un ordine di libri e contiene tutti e sette i tipi di nodi.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Order SYSTEM "order.dtd">
<?xml-stylesheet type="text/css" href="style.css"?>
<!--That is a comment!-->
<order date="2019-02-01">
    <address xmlns:shipping="http://localhost/XML/delivery" xmlns:billing="http://localhost/XML/billing">
        <shipping:name>Ellen Adams</shipping:name>
        <shipping:street>123 Maple Street</shipping:street>
        <shipping:city>Mill Valley</shipping:city>
        <shipping:state>CA</shipping:state>
        <shipping:zip>10999</shipping:zip>
        <shipping:country>USA</shipping:country>
        <billing:name>Mary Adams</billing:name>
        <billing:street>8 Oak Avenue</billing:street>
        <billing:city>Old Town</billing:city>
        <billing:state>PA</billing:state>
        <billing:zip>95819</billing:zip>
        <billing:country>USA</billing:country>
    </address>
    <comment>Please use gift wrapping!</comment>
    <items>
        <book isbn="9781408845660">
            <title>Harry Potter and the Prisoner of Azkaban</title>
            <quantity>1</quantity>
            <priceus>22.94</priceus>
            <comment>Please confirm delivery date until Christmas.</comment>
        </book>
        <book isbn="9780544003415">
            <title>The Lord of the Rings</title>
            <quantity>1</quantity>
            <priceus>17.74</priceus>
        </book>
    </items>
</order>

Nodo elemento (element node)

Nella struttura ad albero del modello di dati XPath, ogni elemento del documento XML cor­ri­spon­de a un nodo elemento. Fanno eccezione la di­chia­ra­zio­ne XML e la de­fi­ni­zio­ne del tipo di documento al­l'i­ni­zio.

Di­chia­ra­zio­ne XML:

<?xml version="1.0"? encoding="utf-8"?>

De­fi­ni­zio­ne del tipo di documento (DTD):

<!DOCTYPE Order SYSTEM "order.dtd">

I nodi elemento iniziano con un tag di apertura, terminano con un tag di chiusura e sono so­li­ta­men­te annidati l'uno nel­l'al­tro.

Il primo nodo elemento nella sequenza del documento è chiamato elemento radice.

Il documento XML mostrato sopra, per esempio, contiene l'e­le­men­to radice order, che funge da elemento genitore dei nodi elemento su­bor­di­na­ti address, comment e items che con­ten­go­no a loro volta altri nodi elemento come elementi figlio.

Nodo documento (document node)

I nodi documento formano le radici della struttura ad albero, che nel documento XML stesso non sono rap­pre­sen­ta­ti né vi­si­va­men­te né te­stual­men­te. Si tratta di un nodo con­cet­tua­le che contiene tutti gli altri elementi del documento. Gli elementi figlio del nodo documento sono l'e­le­men­to radice e, even­tual­men­te, i nodi istru­zio­ne di ela­bo­ra­zio­ne e commento.

Nodo attributo (attribute node)

Gli attributi di un elemento XML sono rap­pre­sen­ta­ti come nodi attributo nel modello di dati XPath. Ogni nodo attributo è co­sti­tui­to da un iden­ti­fi­ca­to­re e un relativo valore.

Nel­l'e­sem­pio di codice sum­men­zio­na­to, il primo nodo elemento book contiene il nodo attributo isbn con il valore 9781408845660.

<book isbn="9781408845660">

I nodi attributo sono con­si­de­ra­ti come ap­par­te­nen­ti al nodo elemento, ma non come suoi elementi figlio.

Nodo testo (text node)

I dati di caratteri contenuti tra il tag di apertura e di chiusura di un nodo elemento sono chiamati nodi testo.

Nel­l'e­sem­pio di codice, il nodo elemento title contiene il nodo testo Harry Potter and the Prisoner of Azkaban.

Harry Potter and the Prisoner of Azkaban

Nodo namespace

Nei documenti XML ben formati, tutti i nomi degli elementi e degli attributi uti­liz­za­ti sono assegnati a uno spazio di nomi. L'as­se­gna­zio­ne è di solito già stabilita in base alla de­fi­ni­zio­ne del tipo di documento al­l'i­ni­zio.

Se in un documento XML vengono uti­liz­za­ti elementi o attributi con diversi namespace, il ri­spet­ti­vo spazio di nomi viene definito espli­ci­ta­men­te nel tag di apertura del­l'e­le­men­to in questione mediante l'at­tri­bu­to xmlns o il prefisso xmlns. L'at­tri­bu­to xmlns si aspetta un valore Uniform Resource Iden­ti­fier (URI), che specifica lo spazio di nomi a cui assegnare l'e­le­men­to cor­ri­spon­den­te. L'as­se­gna­zio­ne di uno spazio di nomi a un prefisso xmlns è di­spo­ni­bi­le per l'e­le­men­to e per tutti gli elementi figlio. Ogni namespace cor­ri­spon­de a un nodo namespace nella struttura ad albero.

Nel­l'e­sem­pio di codice, sono stati definiti due namespace per l'e­le­men­to XML address: xmlns:shipping e xmlns:billing. Gli elementi figlio del­l'e­le­men­to address hanno come prefisso la ri­spet­ti­va as­se­gna­zio­ne.

<address xmlns:shipping="http://localhost/XML/delivery" xmlns:billing="http://localhost/XML/ billing">
        <shipping:name>Ellen Adams</shipping:name>
        <shipping:street>123 Maple Street</shipping:street>
        <shipping:city>Mill Valley</shipping:city>
        <shipping:state>CA</shipping:state>
        <shipping:zip>10999</shipping:zip>
        <shipping:country>USA</shipping:country>
        <billing:name>Mary Adams</billing:name>
        <billing:street>8 Oak Avenue</billing:street>
        <billing:city>Old Town</billing:city>
        <billing:state>PA</billing:state>
        <billing:zip>95819</billing:zip>
        <billing:country>USA</billing:country>
    </address>

Il prefisso xmlns permette di assegnare in modo univoco elementi con lo stesso nome pro­ve­nien­ti da diversi namespace. Ad esempio, l'e­le­men­to street con il prefisso di shipping contiene l'in­for­ma­zio­ne relativa al­l'in­di­riz­zo di consegna, mentre l'e­le­men­to street con il prefisso billing contiene l'in­for­ma­zio­ne relativa al­l'in­di­riz­zo di fat­tu­ra­zio­ne.

Nodo istru­zio­ne di ela­bo­ra­zio­ne (pro­ces­sing in­struc­tion node)

Le istru­zio­ni di ela­bo­ra­zio­ne nei documenti XML si trovano al di fuori della struttura ad albero dei documenti e sono indicate nella ter­mi­no­lo­gia XPath come nodi istru­zio­ne di ela­bo­ra­zio­ne. Un nodo istru­zio­ne di ela­bo­ra­zio­ne inizia con <? e finisce con ?>.

Nel­l'e­sem­pio di codice mostrato sopra, troverete le seguenti istru­zio­ni di ela­bo­ra­zio­ne:

<?xml-stylesheet type="text/css" href="style.css"?>

La di­chia­ra­zio­ne XML al­l'i­ni­zio del file XML è strut­tu­ra­ta sin­tat­ti­ca­men­te come un'i­stru­zio­ne di ela­bo­ra­zio­ne, ma non è un nodo di istru­zio­ne di ela­bo­ra­zio­ne come inteso dal modello di dati XPath.

Nodo commento (comment node)

I contenuti di un documento XML che sono stati con­tras­se­gna­ti come commenti vengono elaborati da XPath come nodi commento. Questo nodo contiene soltanto il contenuto dei caratteri con­tras­se­gna­ti, non la marcatura.

Nel­l'e­sem­pio di codice mostrato sopra troverete il seguente nodo commento:

That is a comment!

Percorsi di lo­ca­liz­za­zio­ne

L'in­di­riz­za­men­to dei nodi viene ef­fet­tua­to uti­liz­zan­do i co­sid­det­ti percorsi di lo­ca­liz­za­zio­ne. Un percorso di lo­ca­liz­za­zio­ne è un'e­spres­sio­ne XPath uti­liz­za­ta per navigare at­tra­ver­so la struttura ad albero e se­le­zio­na­re un de­ter­mi­na­to insieme di nodi. L'insieme di nodi è il risultato di un'e­spres­sio­ne XPath.

I percorsi di lo­ca­liz­za­zio­ne vengono valutati da sinistra a destra. Si distingue tra percorsi di lo­ca­liz­za­zio­ne assoluti e relativi. Un percorso di lo­ca­liz­za­zio­ne assoluto inizia dal nodo documento. In questo caso, l'e­spres­sio­ne XPath inizia con una barra (/). I percorsi di lo­ca­liz­za­zio­ne relativi invece partono da qualsiasi nodo al­l'in­ter­no della struttura ad albero. Questo punto di partenza è chiamato nodo contesto.

Un percorso di lo­ca­liz­za­zio­ne consiste in singoli passi di lo­ca­liz­za­zio­ne, che sono separati da barre (/) come nel caso del­l'in­di­riz­za­men­to dei file nei sistemi di directory.

Ogni passo di lo­ca­liz­za­zio­ne di un percorso è composto da un massimo di tre parti: asse, test di nodo e un qualsiasi numero di predicati.

  • Asse: sce­glien­do l'asse si determina la direzione di na­vi­ga­zio­ne nella struttura ad albero a partire dal nodo contesto o dal nodo documento.
  • Test di nodo: il test di nodo cor­ri­spon­de a un filtro che consente di se­le­zio­na­re un de­ter­mi­na­to set di nodi sull'asse.
  • I predicati: i predicati con­sen­to­no di filtrare ul­te­rior­men­te i nodi se­le­zio­na­ti mediante l'asse e il test dei nodi.

I passi di lo­ca­liz­za­zio­ne di un'e­spres­sio­ne XPath vengono indicati con la sintassi seguente:

asse::nodo-test[predicato1][predicato2]…
Notazione Funzione
/ Se­pa­ra­to­re di percorso tra due passi di lo­ca­liz­za­zio­ne
:: Se­pa­ra­to­re di percorso tra l'asse e il test di nodo

Assi

La sintassi XPath permette la na­vi­ga­zio­ne uti­liz­zan­do i seguenti assi.

Asse De­si­gna­zio­ne italiana Nodi se­le­zio­na­ti child figlio Tutti i nodi figlio di­ret­ta­men­te su­bor­di­na­ti parent nodo genitore Il nodo genitore di­ret­ta­men­te superiore de­scen­dant di­scen­den­te Tutti i nodi su­bor­di­na­ti ancestor* antenato Tutti i nodi di livello superiore following nodi suc­ces­si­vi Tutti i nodi suc­ces­si­vi nella sequenza del documento, ad eccezione dei di­scen­den­ti preceding* nodi pre­ce­den­ti Tutti i nodi pre­ce­den­ti nella sequenza del documento, ad eccezione degli antenati following-sibling nodi fratelli suc­ces­si­vi Tutti i nodi suc­ces­si­vi nel documento XML che di­scen­do­no dallo stesso nodo genitore preceding-sibling* nodi fratelli pre­ce­den­ti Tutti i nodi pre­ce­den­ti nel documento XML che pro­ven­go­no dallo stesso nodo genitore attribute attributo Tutti i nodi attributo di un nodo elemento namespace spazio di nomi Tutti i nodi namespace di un nodo elemento; a partire dalla versione 2.0, questo asse non è più incluso nella specifica. self nodo corrente Il nodo contesto stesso de­scen­dant-or-self di­scen­den­ti compreso il nodo corrente Tutti i nodi su­bor­di­na­ti, compreso il nodo contesto ancestor-or-self* antenati o nodi correnti Tutti i nodi di livello superiore, compreso il nodo contesto

N.B.

Gli assi con­tras­se­gna­ti con un asterisco (*) vanno in ordine ro­ve­scia­to e sono con­si­de­ra­ti opzionali in base alle spe­ci­fi­che XPath versione 1.0, pertanto non devono essere ne­ces­sa­ria­men­te sup­por­ta­ti da ap­pli­ca­zio­ni conformi allo standard.

Il grafico seguente mostra una rap­pre­sen­ta­zio­ne sche­ma­ti­ca degli assi più im­por­tan­ti del modello di dati XPath a partire dal nodo contesto (in rosso).

Ad esempio, l'asse child:: seleziona tutti gli elementi figlio del nodo contesto D: il set di nodi comprende i nodi E, H e I.

Test di nodo

Con il test di nodo potete definire un filtro per il set di nodi se­le­zio­na­to dall'asse. Secondo la specifica XPath, sono possibili due criteri di fil­trag­gio.

  • Nome del nodo: immettere un nome di nodo come test di nodo per se­le­zio­na­re tutti i nodi con il nome cor­ri­spon­den­te sull'asse se­le­zio­na­to.
  • Tipo di nodo: immettere un tipo di nodo come test di nodo per se­le­zio­na­re tutti i nodi del tipo cor­ri­spon­den­te sull'asse se­le­zio­na­to.

Nome del nodo come criterio di fil­trag­gio

Con il seguente percorso di lo­ca­liz­za­zio­ne, ad esempio, è possibile, sulla base del­l'e­sem­pio di codice mostrato sopra, se­le­zio­na­re tutti i di­scen­den­ti con il nome book a partire dal nodo documento.

/descendant::book

Se invece volete filtrare l'at­tri­bu­to isbn da tutti i nodi elemento con il nome book dovete applicare due passi di lo­ca­liz­za­zio­ne.

/descendant::book/attribute::isbn

Tipo di nodo come criterio di fil­trag­gio

Se volete definire un tipo di nodo come criterio di fil­trag­gio per la selezione del set di nodi, uti­liz­za­te come test di nodo una delle seguenti funzioni:

Funzione Nodi se­le­zio­na­ti
node() La funzione node() seleziona tutti i nodi sull'asse se­le­zio­na­to.
text() La funzione text() seleziona tutti i nodi testo sull'asse se­le­zio­na­to.
comment() La funzione comment() seleziona tutti i nodi commento sull'asse se­le­zio­na­to.
pro­ces­sing-in­struc­tion() La funzione pro­ces­sing-in­struc­tion() seleziona tutti i nodi istru­zio­ne per l’ela­bo­ra­zio­ne sull'asse se­le­zio­na­to.
N.B.

Già XPath 1.0 definisce 25 funzioni. A partire da XPath 2.0 sono di­spo­ni­bi­li 111 funzioni per de­scri­ve­re i percorsi di lo­ca­liz­za­zio­ne. Nella Rac­co­man­da­zio­ne W3C XPath and XQuery Functions and Operators 3.1 del 21 marzo 2017 troverete una pa­no­ra­mi­ca delle funzioni.

Test di nodo con Wildcard

Se uti­liz­za­te il me­ta­ca­rat­te­re * (asterisco) invece del test di nodo, vengono se­le­zio­na­ti sull'asse tutti i nodi che cor­ri­spon­do­no al prin­ci­pa­le tipo di nodo dell'asse. La regola è che se l'asse contiene nodi elemento, questo rap­pre­sen­ta il suo tipo di nodo prin­ci­pa­le. Questo vale per tutti gli assi ad eccezione di quelli attribute e namespace, per i quali si considera il tipo di nodo prin­ci­pa­le i nodi attributo o namespace.

Ad esempio, il seguente percorso di lo­ca­liz­za­zio­ne mostra tutti gli attributi del nodo contesto corrente:

attribute::*

Sintassi ab­bre­via­ta

Sono state definite ab­bre­via­zio­ni per gli assi e i passi di lo­ca­liz­za­zio­ne di uso frequente, che possono essere uti­liz­za­te al posto dei nomi inglesi nel­l'e­spres­sio­ne XPath.

Sintassi standard Ab­bre­via­zio­ne Esempio
child:: vuoto Child rap­pre­sen­ta l'asse standard. Se ne­ces­sa­rio, questa notazione dell'asse può essere omessa. Il percorso di lo­ca­liz­za­zio­ne child::book/child::title cor­ri­spon­de quindi alla forma ab­bre­via­ta book/title.
attribute:: @ L'asse attribute, se­pa­ra­to­re incluso, può essere ab­bre­via­to con il carattere @.
Il percorso di lo­ca­liz­za­zio­ne book/attribute::isbn seleziona il nodo attributo isbn del­l'e­le­men­to book e cor­ri­spon­de alla sintassi ab­bre­via­ta book/@isbn.
/de­scen­dant-or-self::node()/ // Il passo di lo­ca­liz­za­zio­ne /de­scen­dant-or-self::node()/ seleziona il nodo documento e tutti i di­scen­den­ti e viene ab­bre­via­to con //. Invece di /de­scen­dant-or-self::node()/child::item è possibile scrivere //item. Il percorso di lo­ca­liz­za­zio­ne seleziona tutti i nodi item del documento.
parent::node() .. Il passo di lo­ca­liz­za­zio­ne parent::node() seleziona il nodo genitore del nodo contesto ed è ab­bre­via­to con "..".
self::node() . Il passo di lo­ca­liz­za­zio­ne self::node() seleziona il nodo contesto corrente e viene ab­bre­via­to con ".".

Predicati

I predicati vengono uti­liz­za­ti per definire criteri di fil­trag­gio ag­giun­ti­vi per il set di nodi se­le­zio­na­ti at­tra­ver­so l'asse e il test di nodo.

I predicati co­sti­tui­sco­no la terza parte opzionale di un passo di lo­ca­liz­za­zio­ne e vengono indicati tra parentesi quadre. I criteri di fil­trag­gio al­l'in­ter­no delle parentesi quadre sono formulati come espres­sio­ni, che possono contenere espres­sio­ni di percorso, funzioni, operatori e stringhe.

La sintassi XPath supporta predicati generici e predicati numerici.

Predicati generici

Le espres­sio­ni dei predicati generici filtrano il set di nodi se­le­zio­na­to dall'asse e dal test di nodo pro­du­cen­do un valore booleano (true o false) per ogni nodo nella selezione. Tutti i nodi con il valore true fanno parte del set di risultati.

Le espres­sio­ni dei predicati generici vengono formulate uti­liz­zan­do gli operatori, che vengono usati per se­le­zio­na­re in modo mirato i nodi con de­ter­mi­na­ti contenuti o proprietà, per esempio tutti i nodi che con­ten­go­no una stringa, un valore di attributo o un elemento figlio (pos­si­bil­men­te in un luogo de­ter­mi­na­to) specifici.

Le seguenti tabelle for­ni­sco­no una pa­no­ra­mi­ca degli operatori di­spo­ni­bi­li. Si distingue tra operatori arit­me­ti­ci, operatori logici e operatori re­la­zio­na­li.

Operatori arit­me­ti­ci Funzione
+ Addizione
- Sot­tra­zio­ne
* Mol­ti­pli­ca­zio­ne
div Divisione
mod Modulo
Operatori re­la­zio­na­li Funzione
= Uguale
!= Diverso
< Minore; ma­sche­ra­men­to richiesto in XSLT (&lt;)
> Maggiore; ma­sche­ra­men­to rac­co­man­da­to in XSLT (&gt;)
<= Minore o uguale; ma­sche­ra­men­to richiesto in XSLT (&lt;)
>= Maggiore o uguale; ma­sche­ra­men­to rac­co­man­da­to in XSLT (&gt;)
Operatori logici Funzione
and AND logico
or OR logico

Nel seguente esempio, il predicato [title="Harry Potter and the Prisoner of Azkaban"] limita il set di risultati a un nodo elemento con il nome book, il cui elemento figlio title contiene la stringa Harry Potter and the Prisoner of Azkaban.

N.B.

L'esempio cor­ri­spon­de alla sintassi di XPath 3, che potrebbe non essere sup­por­ta­ta da tutti gli strumenti online. Le in­ter­ro­ga­zio­ni qui pre­sen­ta­te possono essere ve­ri­fi­ca­te, ad esempio, con il seguente tester online: http://videlibri.sour­ce­for­ge.net/cgi-bin/xidelcgi.

/order/items/book[title="Harry Potter and the Prisoner of Azkaban"]
Abbiamo ora selezionato il nodo elemento book, che contiene i dati per il libro di Harry Potter.
<book isbn="9781408845660">
        <title>Harry Potter and the Prisoner of Azkaban</title>
        <quantity>1</quantity>
        <priceus>22.94</priceus>
        <comment>Please confirm delivery date until Christmas.</comment>
    </book>

Un altro elemento figlio di questo nodo elemento è l'e­le­men­to comment. Per se­le­zio­nar­ne il contenuto è suf­fi­cien­te ag­giun­ge­re altri due passi al percorso di lo­ca­liz­za­zio­ne.

/order/items/book[title="Harry Potter and the Prisoner of Azkaban"]/comment/text()

Con il passo di lo­ca­liz­za­zio­ne comment (sintassi breve per child::comment) na­vi­ghia­mo al­l'o­mo­ni­mo elemento figlio del­l'e­le­men­to book e se­le­zio­nia­mo il suo nodo testo con la funzione text(). Questo passaggio cor­ri­spon­de alla seguente stringa:

Please confirm delivery date until Christmas.

Se in un predicato viene uti­liz­za­ta solo l'e­spres­sio­ne di un percorso si parla di test di esistenza. Per esempio, il seguente percorso di lo­ca­liz­za­zio­ne potrebbe essere usato per ve­ri­fi­ca­re se il documento XML sopra riportato contiene uno o più nodi con il nome comment.

Sintassi ab­bre­via­ta:

//book[comment]

Sintassi standard:

/descendant-or-self::node()/child::book[child::comment]

Il percorso di lo­ca­liz­za­zio­ne //book[comment] seleziona tutti i nodi con il nome book che hanno un elemento figlio con il nome comment.

Predicati numerici

I predicati numerici con­sen­to­no di in­di­riz­za­re i nodi in base alla loro posizione. Il seguente percorso di lo­ca­liz­za­zio­ne, ad esempio, seleziona, in base alla sequenza del documento, il secondo nodo con il nome book:

//book[2]

Il predicato [2] è in realtà l'ab­bre­via­zio­ne della funzione [position()=2]. XPath seleziona quindi prima tutti i nodi con il nome "book" e filtra poi il nodo per il quale la funzione position()=2 re­sti­tui­sce il valore booleano true.

N.B.

A dif­fe­ren­za di altri linguaggi di pro­gram­ma­zio­ne, le enu­me­ra­zio­ni XPath iniziano con 1.

Ulteriori in­for­ma­zio­ni sul lin­guag­gio XML Path Language

Una pa­no­ra­mi­ca del­l'at­tua­le stato di sviluppo del lin­guag­gio XML Path Language e di tutti gli standard e delle bozze pub­bli­ca­te è con­sul­ta­bi­le sul sito web del W3C.

In­for­ma­zio­ni e strumenti gratuiti per l'u­ti­liz­zo di XPath nelle ap­pli­ca­zio­ni web sono di­spo­ni­bi­li nei MDN Web Docs e nel Microsoft Developer Network.

Come fonte in lingua italiana rac­co­man­dia­mo anche la guida di HTML.it.

Vai al menu prin­ci­pa­le