Definizione di predicati di selezione nel percorso (SQLXML 4.0)

Un predicato filtra un set di nodi rispetto a un asse (simile a una clausola WHERE in un'istruzione SELECT). Il predicato viene specificato tra parentesi. Per filtrare ogni nodo nel set di nodi, l'espressione del predicato viene valutata con il nodo come nodo di contesto e con il numero di nodi nel set di nodi come dimensioni del contesto. Se l'espressione del predicato restituisce TRUE per il nodo, il nodo viene incluso nel set di nodi risultante.

XPath consente inoltre l'applicazione di filtri basata sulla posizione. Un'espressione del predicato valutata in numero seleziona il nodo dell'ordinale. Il percorso Customer[3], ad esempio, restituisce il terzo cliente. Predicati numerici di questo tipo non sono supportati. Sono supportate solo le espressioni del predicato che restituiscono un risultato booleano.

[!NOTA]

Per informazioni sulle limitazioni di questa implementazione XPath e sulle differenze tra XPath e la specifica W3C, vedere Introduzione all'utilizzo di query XPath (SQLXML 4.0).

Predicato di selezione: esempio 1

L'espressione XPath seguente (percorso) seleziona dal nodo di contesto corrente tutti gli elementi figlio <Customer> che includono l'attributo CustomerID con valore ALFKI:

/child::Customer[attribute::CustomerID="ALFKI"]

In questa query XPath child e attribute sono nomi di asse. Customer è il test di nodo (TRUE se Customer è un <nodo dell'elemento>, poiché <element> è il tipo di nodo principale per l'asse child). attribute::CustomerID="ALFKI" è il predicato. Nel predicato attribute è l'asse e CustomerID è il test di nodo (TRUE se CustomerID è un attributo del nodo di contesto, in quanto <attribute> è il tipo di nodo principale dell'asse attribute).

Utilizzando la sintassi abbreviata, la query XPath può essere specificata anche nel modo seguente:

/Customer[@CustomerID="ALFKI"]

Predicato di selezione: esempio 2

L'espressione XPath seguente (percorso) seleziona dal nodo di contesto corrente tutti i nipoti <Order> che includono l'attributo SalesOrderID con valore 1:

/child::Customer/child::Order[attribute::SalesOrderID="1"]

In questa espressione XPath child e attribute sono nomi di asse. Customer, Order e SalesOrderID sono i test di nodo. attribute::OrderID="1" è il predicato.

Utilizzando la sintassi abbreviata, la query XPath può essere specificata anche nel modo seguente:

/Customer/Order[@SalesOrderID="1"]

Predicato di selezione: esempio 3

L'espressione XPath seguente (percorso) seleziona dal nodo di contesto corrente tutti i figli <Customer> che hanno uno o più figli <ContactName>:

child::Customer[child::ContactName]

In questo esempio si presuppone che <ContactName> sia un elemento figlio dell'elemento <Customer> nel documento XML, che è considerato il mapping incentrato sugli elementi in uno schema XSD con annotazioni.

In questa espressione XPath child è il nome dell'asse. Customer se il test di nodo (TRUE se Customer è un nodo <element> , poiché <element> è il tipo del nodo principale per l'asse child). child::ContactName è il predicato. Nel predicato child è l'asse e ContactName è il test di nodo (TRUE se ContactName è un nodo <element>).

Questa espressione restituisce solo gli elementi <Customer> figli del nodo di contesto che includono elementi figlio <ContactName>.

Utilizzando la sintassi abbreviata, la query XPath può essere specificata anche nel modo seguente:

Customer[ContactName]

Predicato di selezione: esempio 4

L'espressione XPath seguente seleziona gli elementi <Customer> figli del nodo di contesto che non includono elementi figlio <ContactName>.

child::Customer[not(child::ContactName)]

In questo esempio si presuppone che <ContactName> sia un elemento figlio dell'elemento <Customer> nel documento XML e che il campo ContactName non sia necessario nel database.

In questo esempio, child è l'asse. Customer è il test di nodo (TRUE se Customer è un nodo <element>). not(child::ContactName) è il predicato. Nel predicato, child è l'asse e ContactName è il test di nodo (TRUE se ContactName è un nodo <element>).

Utilizzando la sintassi abbreviata, la query XPath può essere specificata anche nel modo seguente:

Customer[not(ContactName)]

Predicato di selezione: esempio 5

L'espressione XPath seguente seleziona dal nodo di contesto corrente tutti i figli <Customer> che includono l'attributo CustomerID:

child::Customer[attribute::CustomerID]

In questo esempio, child è l'asse e Customer è il test di nodo (TRUE se Customer è un nodo <element>). attribute::CustomerID è il predicato. Nel predicato attribute è l'asse e CustomerID è il predicato (TRUE se CustomerID è un nodo <attribute>).

Utilizzando la sintassi abbreviata, la query XPath può essere specificata anche nel modo seguente:

Customer[@CustomerID]

Predicato di selezione: esempio 6

Microsoft SQLXML 4.0 include il supporto per query XPath che contengono un prodotto incrociato nel predicato, come illustrato nell'esempio seguente:

Customer[Order/@OrderDate=Order/@ShipDate]

La query seleziona tutti i clienti con un elemento Order per cui OrderDate è uguale a ShipDate di qualsiasi Order.

Vedere anche

Riferimento

Introduzione agli schemi XSD con annotazioni (SQLXML 4.0)

Formattazione XML sul lato client (SQLXML 4.0)