Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

XPath

XPath è un linguaggio che serve ad indirizzare parti di un documento XML
XPath è un linguaggio che serve ad indirizzare parti di un documento XML
Link copiato negli appunti

Iniziamo con questo capitolo, la panoramica sulle tecnologie della famiglia XML andando a parlare di XPath.
XPath è un linguaggio tramite il quale è possibile esprimere delle espressioni per indirizzare parti di un documento XML. È un linguaggio ideato per operare all'interno di altre tecnologie XML (di cui parleremo nei capitolo successivi), quali XSL e XPointer, ed è caratterizzato dal fatto di avere una sintassi non XML. In questo modo può essere meglio utilizzato all'interno di URI o come valore di attributi di documenti XML.
XPath opera su una rappresentazione logica del documento XML, che viene modellato con una struttura ad albero ed XPath definisce una sintassi per accedere ai nodi di tale albero.
Oltre a questo XPath mette a disposizione una serie di funzioni per la manipolazione di stringhe, numeri e booleani, da utilizzare per operare sui valori o sugli attributi dei nodi.
Le espressioni definite da XPath per accedere ai nodi dell'albero prendono il nome di Location Path (percorsi di localizzazione).
La struttura un location path è la seguente:
axis::node-test[predicate].

La componente axis esprime la relazione di parentela tra il nodo cercato ed il nodo corrente; la componente node-test specifica il tipo o il nome del nodo da cercare; mentre predicate contiene zero o più filtri (espressi tra parentesi quadre) per specificare delle condizioni più selettive da applicare alla ricerca.
Le relazioni di parentela principali che possono essere contenute in axis sono:

  • ancestor: indica tutti i nodi antenati del nodo corrente, ovvero tutti i nodi che lo precedono nell'albero associato al documento XML;
  • attribute: indica tutti gli attributi del nodo corrente;
  • child: indica i nodi figli del nodo corrente;
  • descendant: indica tutti i discendenti del nodo corrente, ovvero tutti i nodi che hanno seguono il nodo corrente nell'albero XML;
  • parent: indica il nodo genitore del nodo corrente, ovvero quello che lo precede nell'albero;
  • self: indica il nodo corrente.

Vediamo qualche esempio per capire meglio come utilizzare i Location Path per accedere agli elementi di un documento XML, utilizzando l'esempio della rubrica introdotto nel capitolo precedente, anche se con qualche piccola modifica.

<?xml version="1.0"?>
<rubrica>
  <persona>
    <nome>Mario</nome>
    <cognome>Rossi</cognome>
    <indirizzo>
      <via>via bianchi 1</via>
      <cap>00000</cap>
      <citta>Roma</citta>
    </indirizzo>
    <telefono>
      <telefono_fisso gestore="Abc">123456</telefono_fisso>
      <telefono_cellulare gestore="Def">987656412</telefono_cellulare>
    </telefono>
  </persona>
</rubrica>

child::nome
Questa espressione seleziona tutti i nodo chiamati 'nome' che sono figli del nodo corrente.

child::*
Seleziona tutti i nodi figli del nodo corrente.

attribute::gestore
Seleziona l'attributo di nome 'gestore' del nodo corrente.

descendant::cognome[cognome='Rossi']
Seleziona tutti i nodi chiamati 'cognome' tra i nodi discendenti del nodo corrente, il cui valore è Rossi.

In XPath è possibile accedere ai nodi dell'albero utilizzando delle espressioni abbreviate dei Location Path.
Le espressioni abbreviate, come suggerisce il nome stesso, sono una versione semplificata e compatta dei Location Path ed offrono un meccanismo più veloce, ma al tempo stesso meno potente per accedere ai nodi dell'albero.
Queste espressioni sono costituite da una lista di nomi di elementi del documento XML, separati da uno slash(/), e tale lista descrive il percorso per accedere all'elemento desiderato.
È un meccanismo molto simile a quello usato per identificare i file e le directory nel filesystem. Ad esempio per indicare il file (chiamato mio-file) memorizzato all'interno di una directory (chiamata mia-directory) del vostro hard disk, utilizzate la seguente sintassi: c:directory1file1.
Le espressioni abbreviate di XPath utilizzano un meccanismo concettualmente simile: vediamo come, utilizzando il solito file XML d'esempio.

/rubrica/persona/nome
Questa espressione abbreviata permette di recuperare i nodi chiamati 'nome' indicando il percorso assoluto per raggiungere il nodo desiderato, attraverso una lista di nodi separata da slash.

//nome
Con il doppio slash ricerchiamo i nodi chiamati 'nome', in tutto il documento, indipendentemente dalla loro posizione e dal loro livello sull'albero associato al documento XML.

/rubrica//via
Ricerchiamo tutti i nodi chiamati 'via' a qualsiasi livello dell'albero purchè contenuti all'interno del nodo chiamato 'rubrica'.

/rubrica/persona/*
Ricerca qualsiasi elemento figlio del nodo chiamato 'persona'.

//nome/@valuta
Ricerca l'attributo 'valuta' dell'elemento 'nome'.

Anche all'interno delle espressioni abbreviate possiamo inserire i predicati visti nel caso dei Location Path.
Ad esempio:

//persona[nome='Mario']
questa espressione ricerca tutti i nodi 'persona' che hanno il tag 'nome' il cui valore è Mario.

Come detto all'inizio del capitolo, XPath mette a disposizione anche delle funzioni per gestire i nodi, le stringhe, i numeri e i booleani.
Vediamo adesso di elencare brevemente e schematicamente alcune funzioni principali:

  • count(node-set): restituisce il numero di nodi contenuti nell'insieme di nodi passato come argomento della funzione;
  • name(nodo): restituisce il nome di un nodo;
  • position(): determina la posizione di un elemento all'interno di un insieme di nodi;
  • last(): indica la posizione dell'ultimo nodo di un'insieme di nodi;
  • id(valore): seleziona gli elementi in funzione del loro identificatore;
  • concat(s1,...,sn): restituisce una stringa risultato della concatenazione delle stringhe specificate tra gli argomenti di una funzione;
  • string(valore): converte il valore dell'argomento in una stringa;
  • string-length(stringa): ritorna la lunghezza della stringa passata come parametro;
  • substring(stringa,inizio,lunghezza): restituisce una sotto-stringa della stringa passata come argomento;
  • ceiling(numero): arrotonda il numero per eccesso;
  • floor(numero): arrotonda il numero per difetto;
  • number(valore): converte il valore dell'argomento in un numero;
  • sum(node-set): esprime la somma di un insieme di valori numerici contenuti in un insieme di nodi.

Come esempi di espressioni XPath che fanno uso di queste funzioni consideriamo:

//persona[last()]
Questa espressione restituisce l'ultimo nodo 'persona' contenuto all'interno del file XML.

//persona[position()= 3]
Restituisce il terzo nodo 'persona' contenuto all'interno del file XML.

count(/rubrica/persona)
Indica il il numero di nodi chiamati 'persona' contenuti all'interno del documento XML.

Nei prossimi capitoli vedremo come utilizzare XPath all'interno di XSLT e XPointer, intanto per maggiori approfondimenti, vi consiglio la lettura della specifica di XPath, all'indirizzo: http://www.w3.org/tr/xpath.

Ti consigliamo anche