Specifica di un test di nodo nel percorso (SQLXML 4.0)

Un test di nodo specifica il tipo di nodo selezionato dal passo. Ogni asse (child, parent, attribute o self) dispone di un tipo di nodo principale. Per l'asse attribute, il tipo di nodo principale è <attribute>. Per gli assi parent, child e self, il tipo di nodo principale è <element>.

[!NOTA]

Il test di nodo con carattere jolly *, ad esempio child::*, non è supportato.

Test di nodo: esempio 1

Il percorso child::Customer seleziona gli elementi figlio <Customer> del nodo di contesto.

In questo esempio child è l'asse e Customer è il test di nodo. Il tipo di nodo principale per l'asse child è <element>. Pertanto, il test di nodo è TRUE se il nodo <Customer> è un nodo <element>. Se il nodo di contesto non dispone di elementi figlio <Customer>, viene restituito un set di nodi vuoto.

Test di nodo: esempio 2

Il percorso attribute::CustomerID seleziona l'attributo CustomerID del nodo di contesto.

Nell'esempio attribute è l'asse e CustomerID è il test di nodo. Il tipo di nodo principale dell'asse attribute è <attribute>. Pertanto, il test di nodo è TRUE se il nodo CustomerID è un nodo <attribute>. Se il nodo di contesto non dispone di CustomerID, viene restituito un set di nodi vuoto.

[!NOTA]

In questa implementazione di XPath, se un passo si riferisce a un tipo <element> o <attribute> non dichiarato nello schema, viene generato un errore, a differenza di quanto avviene con l'implementazione di XPath in MSXML, che restituisce un set di nodi vuoto.

Sintassi abbreviata per gli assi

Per il percorso è supportata la sintassi abbreviata seguente:

  • attribute:: può essere abbreviato utilizzando @.

    Il percorso Customer[@CustomerID="ALFKI"] è uguale a child::Customer[attribute::CustomerID="ALFKI"].

  • child:: può essere omesso da un passo.

    In questo caso, child è l'asse predefinito. Il percorso Customer/Order è uguale a child::Customer/child::Order.

  • self::node() può essere abbreviato utilizzando un punto (.), mentre parent::node() può essere abbreviato utilizzando due punti (..).