Condividi tramite


Operatori e caratteri speciali

Le espressioni XPath sono costruite utilizzando gli operatori e i caratteri speciali visualizzati nella seguente tabella.

/

Operatore figlio: seleziona i nodi figlio immediati dell'insieme di sinistra. Se questo operatore di percorso è presente all'inizio del pattern, indica che i nodi figlio devono essere selezionati dal nodo radice.

//

Discesa ricorsiva: ricerca l'elemento specificato a qualsiasi livello. Quando questo operatore di percorso viene visualizzato all'inizio del pattern, indica una discesa ricorsiva dal nodo radice.

.

Indica il contesto corrente.

..

Il nodo padre del nodo di contesto corrente.

*

Carattere jolly: seleziona tutti gli elementi senza considerarne il nome.

@

Attributo: prefisso per un nome di attributo.

@*

Carattere jolly dell'attributo: seleziona tutti gli attributi senza considerarne il nome.

:

Separatore spazio dei nomi: separa il prefisso dello spazio del nome dall'elemento o dal nome dell'attributo.

( )

Raggruppa le operazioni per stabilire esplicitamente la precedenza.

[ ]

Applica un modello del filtro.

[ ]

Operatore indice: utilizzato per l'indicizzazione all'interno di una raccolta.

+

Esegue l'addizione.

-

Esegue la sottrazione.

div

Esegue la divisione a virgola mobile in base alla norma IEEE 754.

*

Esegue la moltiplicazione.

mod

Restituisce la parte rimanente di una divisione di troncamento.

Questa tabella non include operatori sugli insiemi e operatori booleani, che sono elencati in Espressioni booleane, di confronto e set oppure Operazioni sugli insiemi.

L'ordine di precedenza (dalla priorità più alta a quella più bassa) viene definito come indicato nella seguente tabella.

Precedenza Carattere Scopo

1

( )

Raggruppamento

2

[ ]

Filtri

3

/ //

Operazioni di percorso

L'operatore di gruppo () è applicabile solo all'espressione di livello superiore. Ad esempio, (//author/degree | //author/name) è un'operazione di raggruppamento valida, mentre //author/(degree | name) non lo è.

Gli operatori dei modelli del filtro ([]) hanno la precedenza sugli operatori di percorso (/ e //). Ad esempio, l'espressione //comment()[3] seleziona tutti i commenti con un indice uguale a 3 relativo all'elemento padre dei commenti in un punto qualsiasi del documento. Questa differisce dall'espressione (//comment())[3], che seleziona il terzo commento dal set di tutti i commenti relativi all'elemento padre dei commenti. La prima espressione può restituire più di un commento, mentre l'ultima può restituirne solo uno.

Questi operatori e i caratteri speciali sono descritti dettagliatamente nel presente documento di riferimento.

Operatori di percorso

L'insieme di elementi di un certo tipo può essere determinato utilizzando gli operatori di percorso (/ and //). Nella parte sinistra di questi operatori sono indicati gli argomenti sui quali eseguire la selezione, mentre nella parte destra sono indicati gli elementi da selezionare. L'operatore figlio (/) seleziona dai nodi figlio immediati dell'insieme di sinistra, mentre l'operatore discendente (//) seleziona da discendenti arbitrari dell'insieme di sinistra. In effetti, // può essere considerato un sostituto per uno o più livelli di gerarchia.

Notare che gli operatori di percorso modificano il contesto mentre viene eseguita la query. Mettendo insieme gli operatori di percorso, gli utenti possono scorrere la struttura ad albero del documento.

Esempi

Espressione Si riferisce a

author/first-name

Tutti gli elementi <first-name> all'interno di un elemento <author> del nodo di contesto corrente.

bookstore//title

Tutti gli elementi <title> presenti a diversi livelli all'interno dell'elemento <bookstore> (discendenti arbitrari). Notare che ciò è diverso dal pattern seguente bookstore/*/title.

bookstore/*/title

Tutti gli elementi <title> che sono elementi nipote degli elementi <bookstore>.

bookstore//book/excerpt//emph

Tutti gli elementi <emph> in qualsiasi punto all'interno degli elementi figlio <excerpt> degli elementi <book>, in qualsiasi punto all'interno dell'elemento <bookstore>.

.//title

Tutti gli elementi <title> presenti a diversi livelli nel contesto corrente. Questa situazione è essenzialmente l'unica in cui è richiesto il punto.

Carattere jolly

È possibile fare riferimento a un elemento senza utilizzarne il nome, sostituendo l'insieme di caratteri jolly (*). La raccolta * fa riferimento a tutti gli elementi figlio del contesto corrente, indipendentemente dal nome di tag.

Esempi

Espressione Si riferisce a

author/*

Tutti gli elementi figlio degli elementi <author>.

book/*/last-name

Tutti gli elementi <last–name> che sono elementi nipote degli elementi <book>.

*/*

Tutti gli elementi nipote del contesto corrente.

my:book

L'elemento <book> dallo spazio dei nomi my.

my:*

Tutti gli elementi dallo spazio dei nomi my.

Notare che il pattern *:book non è supportato.

Attributi

XPath denota i nomi degli attributi con il simbolo @. Gli attributi e gli elementi figlio sono trattati in modo imparziale e le relative capacità sono equivalenti laddove possibile.

ms256122.note(it-it,VS.100).gifNota:
Gli attributi non possono contenere elementi figlio, pertanto si verificano errori di sintassi se gli operatori di percorso vengono applicati agli attributi.Inoltre, non è possibile applicare un indice agli attributi perché, per definizione, per gli attributi non è definito alcun ordine.

Esempi

Espressione Si riferisce a

@style

L'attributo style del contesto corrente dell'elemento.

price/@exchange

L'attributo exchange degli elementi <price> all'interno del contesto corrente.

book/@style

L'attributo style di tutti gli elementi <book> .

Notare che il seguente esempio non è valido poiché un attributo non può avere attributi figlio.

price/@exchange/total

Ricerca di più attributi

Tutti gli attributi di un elemento possono essere restituiti utilizzando @*. Questo è potenzialmente utile per applicazioni che trattano gli attributi come i campi di un record.

Esempi

Espressione Si riferisce a

@*

Tutti gli attributi del nodo di contesto corrente.

@my:*

Tutti gli attributi dallo spazio dei nomi my. Questo non include gli attributi non qualificati negli elementi dello spazio dei nomi my.

Notare che il pattern @*:title non è supportato.

Vedere anche

Riferimento

Esempi XPath

Concetti

Operazioni sugli insiemi
File XML di esempio per la sintassi di XPath (inventory.xml)