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 |
---|---|
|
Un set di nodi contenente gli elementi |
|
Un set di nodi contenente gli elementi |
|
Un set di nodi contenente tutti gli elementi |
|
Un set di nodi contenente tutti gli elementi |
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 |
|
Confronti |
5 |
|
Confronti |
6 |
|
Union |
7 |
|
NOT booleano |
8 |
|
AND booleano |
9 |
|
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: