Compartir a través de


Especificar predicados de selección en la ruta de acceso de ubicación (SQLXML 4.0)

Un predicado filtra un conjunto de nodos con respecto a un eje (similar a una cláusula WHERE en una instrucción SELECT). El predicado se especifica entre corchetes. Para cada nodo del conjunto de nodos que se va a filtrar, la expresión de predicado se evalúa con ese nodo como el nodo de contexto, con el número de nodos del conjunto de nodos como tamaño de contexto. Si la expresión de predicado se evalúa como TRUE para ese nodo, el nodo se incluye en el conjunto de nodos resultante.

XPath también permite el filtrado basado en posición. Una expresión de predicado que se evalúa como un número selecciona ese nodo ordinal. Por ejemplo, la ruta de acceso de la ubicación Customer[3] devuelve el tercer cliente. No se admiten tales predicados numéricos. Sólo se admiten expresiones de predicado que devuelven un resultado Booleano.

[!NOTA]

Para obtener información sobre las limitaciones de esta implementación XPath de XPath y las diferencias entre ella y la especificación W3C, vea Introducción al uso de consultas XPath (SQLXML 4.0).

Predicado de selección: Ejemplo 1

La expresión XPath siguiente (ruta de acceso de la ubicación) selecciona del nodo de contexto actual todos los elementos secundarios <Customer> que tienen el atributo CustomerID con el valor de ALFKI:

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

En esta consulta XPath, child y attribute son nombres de eje. Customer es la prueba de nodo (TRUE si Customer es un <nodo de elemento>, porque <elemento> es el tipo de nodo principal para el eje child). attribute::CustomerID="ALFKI" es el predicado. En el predicado, attribute es el eje y CustomerID es la prueba de nodo (TRUE si CustomerID es un atributo del nodo de contexto, porque <atributo> es el tipo de nodo principal del eje attribute).

Con la sintaxis abreviada, la consulta XPath también se puede especificar como:

/Customer[@CustomerID="ALFKI"]

Predicado de selección: Ejemplo 2

La expresión XPath siguiente (ruta de acceso de la ubicación) selecciona del nodo de contexto actual todos los descendientes del secundario <Order> que tienen el atributo SalesOrderID con el valor 1:

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

En esta expresión XPath, child y attribute son los nombres del eje. Customer, Ordery SalesOrderID son las pruebas de nodo. attribute::OrderID="1" es el predicado.

Con la sintaxis abreviada, la consulta XPath también se puede especificar como:

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

Predicado de selección: Ejemplo 3

La expresión XPath siguiente (ruta de acceso de la ubicación) selecciona del nodo de contexto actual todos los elementos secundarios <Customer> que tienen uno o más elementos secundarios <ContactName>:

child::Customer[child::ContactName]

En este ejemplo se supone que <ContactName> es un elemento secundario del elemento <Customer> del documento XML, al que se hace referencia como asignación centrada en elementos en un esquema XSD anotado.

En esta expresión XPath, child es el nombre de eje. Customer es la prueba de nodo (TRUE si Customer es un nodo de <elemento> , porque <elemento> es el tipo de nodo principal para el eje child). child::ContactName es el predicado. En el predicado, child es el eje y ContactName es la prueba de nodo (TRUE si ContactName es un nodo de <elemento>).

Esta expresión devuelve solamente los elementos secundarios <Customer> del nodo de contexto que tienen elementos secundarios <ContactName>.

Con la sintaxis abreviada, la consulta XPath también se puede especificar como:

Customer[ContactName]

Predicado de selección: Ejemplo 4

La expresión XPath siguiente selecciona elementos secundarios <Customer> del nodo de contexto que no tienen elementos secundarios <ContactName>:

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

En este ejemplo se supone que <ContactName> es un elemento secundario del elemento <Customer> en el documento XML, y el campo ContactName no se requiere en la base de datos.

En este ejemplo, child es el eje. Customer es la prueba de nodo (TRUE si Customer es un nodo de <elemento>). not(child::ContactName) es el predicado. En el predicado, child es el eje y ContactName es la prueba de nodo (TRUE si ContactName es un nodo de <elemento>).

Con la sintaxis abreviada, la consulta XPath también se puede especificar como:

Customer[not(ContactName)]

Predicado de selección: Ejemplo 5

La siguiente expresión XPath selecciona del nodo de contexto actual todos los elementos secundarios <Customer> que tienen el atributo CustomerID:

child::Customer[attribute::CustomerID]

En este ejemplo, child es el eje y Customer es la prueba de nodo (TRUE si Customer es un nodo de <elemento>). attribute::CustomerID es el predicado. En el predicado, attribute es el eje y CustomerID es el predicado (TRUE si CustomerID es un nodo de <atributo>).

Con la sintaxis abreviada, la consulta XPath también se puede especificar como:

Customer[@CustomerID]

Predicado de selección: Ejemplo 6

Microsoft SQLXML 4.0 incluye compatibilidad para las consultas XPath que contienen un producto cruzado en el predicado, como se muestra en el ejemplo siguiente:

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

Esta consulta selecciona todos los clientes con algún elemento Order para el que OrderDate sea igual a ShipDate de cualquier Order.