Especificar una prueba de nodo en la ruta de acceso de ubicación (SQLXML 4.0)
Una prueba de nodo especifica el tipo de nodo seleccionado por el paso de ubicación. Cada eje (child, parent, attribute o self) tiene un tipo de nodo principal. Para el eje attribute, el tipo de nodo principal es <attribute>. Para los ejes parent, child y self, el tipo de nodo principal es <element>.
[!NOTA]
La prueba de nodo de carácter comodín * (por ejemplo, child::*) no se admite.
Prueba de nodo: Ejemplo 1
La ruta de acceso de ubicación child::Customer selecciona el elemento secundario <Customer> del nodo de contexto.
En este ejemplo, child es el eje y Customer es la prueba de nodo. El tipo de nodo principal del eje child es <element>. Por consiguiente, la prueba de nodo es TRUE si el nodo <Customer> es un nodo <element>. Si el nodo de contexto no tiene ningún elemento secundario <Customer>, se devuelve un conjunto de nodos vacío.
Prueba de nodo: Ejemplo 2
La ruta de acceso de ubicación attribute::CustomerID selecciona el atributo CustomerID del nodo de contexto.
En el ejemplo, attribute es el eje y CustomerID es la prueba de nodo. El tipo de nodo principal del eje attribute es <attribute>. Por consiguiente, la prueba de nodo es TRUE si CustomerID es un nodo <attribute>. Si el nodo de contexto no tiene ningún CustomerID, se devuelve un conjunto de nodos vacío.
[!NOTA]
En esta implementación de XPath, si un paso de ubicación hace referencia a un tipo de <element> o <attribute> no declarado en el esquema, se genera un error. Este comportamiento es diferente al de la implementación de XPath en MSXML, que devuelve un conjunto de nodos vacío.
Sintaxis abreviada para los ejes
Se admite la sintaxis abreviada siguiente para la ruta de acceso de ubicación:
attribute:: se puede abreviar como @.
La ruta de acceso de ubicación Customer[@CustomerID="ALFKI"] es la misma que child::Customer[attribute::CustomerID="ALFKI"].
child:: se puede omitir en un paso de ubicación.
Por tanto, child es el eje predeterminado. La ruta de acceso de ubicación Customer/Order es la misma que child::Customer/child::Order.
self::node() se puede abreviar en un punto (.) y parent::node() se puede abreviar en dos puntos (..).