Operazioni sugli insiemi

XPath (XML Path Language) supporta l'operazione sugli insiemi |.

Operatore union (|)

L'operatore | o union restituisce l'unione dei due operandi, che devono essere set di nodi. Ad esempio, //author | //publisher restituisce un set di nodi che combina tutti i nodi //author e //publisher. È possibile concatenare più operatori union per combinare più set di nodi. Ad esempio, //author | //publisher | //editor | //book-seller restituisce un set di nodi contenente tutti gli elementi //author, //publisher, //editor e //book-seller elements. L'operatore union preserva l'ordine dei documenti e non restituisce duplicati.

Esempi

Espressione Si riferisce a

first-name | last-name

Un set di nodi contenente gli elementi <first-name> e <last-name> nel contesto corrente.

(bookstore/book | bookstore/magazine)

Un set di nodi contenente gli elementi <book> o <magazine> in un elemento <bookstore>.

book | book/author

Un set di nodi contenente tutti gli elementi <book> e <author> all'interno degli elementi <book>.

(book | magazine)/price

Un set di nodi contenente tutti gli elementi <price> degli elementi <book> o <magazine>.

Esempio

Nell'esempio seguente viene illustrato l'utilizzo dell'operatore union.

File XML (test.xml)

File XSLT (test.xsl)

Il seguente foglio di stile XSLT seleziona tutti gli elementi <x> in cui l'attributo a è uguale a 2 e tutti gli elementi che <x> che non presentano attributi.

La trasformazione restituisce il seguente risultato:

Precedenza

L'ordine di precedenza (dalla priorità più alta a quella più bassa) tra gli operatori di confronto e booleani viene visualizzato nella seguente tabella.

Precedenza Operatori Descrizione

1

( )

Raggruppamento

2

[ ]

Filtri

3

/

//

Operazioni di percorso

4

&lt;

&lt;=

&gt;

&gt;=

Confronti

5

=

!=

Confronti

6

|

Union

7

not()

NOT booleano

8

and

AND booleano

9

or

OR booleano

Esempio

Nell'esempio seguente viene illustrato l'effetto della precedenza degli operatori elencata in precedenza.

File XML (test.xml)

File XSLT di base (test.xsl)

Il file XSLT di base sarà utilizzato come punto di partenza per la serie di spiegazioni che seguono.

Caso 0: Esecuzione dei test

È possibile aggiungere la seguente regola di modello al foglio di stile XSLT.

Ciò produce un documento XML identico all'originale senza l'istruzione di elaborazione <?xml version="1.0"?>.

Nei casi seguenti sono descritti diversi modi per scrivere questa regola di modello. Lo scopo è illustrare l'ordine in cui gli operatori XPath si associano a un elemento.

Caso 1:() è un'associazione più forte di []

La seguente regola di modello seleziona il primo elemento <y> nell'ordine del documento tra tutti gli elementi <y> nel documento di origine.

Il risultato è il seguente:

<y>y31</y>

Caso 2: [] è un'associazione più forte di / o //

La seguente regola di modello seleziona tutti gli elementi <y> che sono i primi di pari livello.

Il risultato è il seguente:

<y>y31</y>

<y>y21</y>

<y>y11</y>

<y>y03</y>

Caso 3: AND, NOT

La seguente regola di modello seleziona tutti gli elementi <x> che non hanno elementi figlio <x>, che hanno un elemento padre <x> e che non hanno attributi.

Il risultato è un singolo elemento <x>, elencato di seguito con i relativi elementi figlio:

<x>
   <y>y31</y>
   <y>y32</y>
</x>

Caso 4: OR, AND, NOT

La seguente regola di modello seleziona ogni elemento <x> che è un elemento figlio di <x> o che non è un elemento padre di <x> e che non presenta attributi.

Il risultato è un set di nodi contenente gli elementi <x> elencati di seguito con i relativi elementi figlio:

Caso 5: AND, OR, NOT

La seguente regola di modello seleziona ogni elemento <x> che è un elemento figlio di <x> ma che non è un elemento padre di <x> oppure che non presenta attributi.

Il risultato è un set di nodi contenente gli elementi <x> elencati di seguito con i relativi elementi figlio: