Especificar predicados de selección en la ruta de acceso de ubicación (SQLXML 4.0)
Se aplica a: SQL ServerAzure SQL Database
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. Solo se admiten expresiones de predicado que devuelven un resultado Booleano.
Nota:
Para obtener información sobre las limitaciones de esta implementación de XPath de XPath y las diferencias entre ella y la especificación W3C, vea Introduction to Using XPath Queries (SQLXML 4.0).
Predicado de selección: ejemplo 1
La siguiente expresión XPath (ruta de acceso de ubicación) selecciona en el nodo de contexto actual todos los <elementos secundarios del elemento 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< el elemento> es el tipo de nodo principal para el child
eje). 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, ya que< el atributo> es el tipo de nodo principal del eje de atributos).
Con la sintaxis abreviada, la consulta XPath también se puede especificar como:
/Customer[@CustomerID="ALFKI"]
Predicado de selección: ejemplo 2
La siguiente expresión XPath (ruta de acceso de ubicación) selecciona en el nodo de contexto actual todos los <nietos 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
, Order
y 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 siguiente expresión XPath (ruta de acceso de ubicación) selecciona en el nodo de contexto actual todos los elementos secundarios Customer> que tienen uno o varios< elementos secundarios ContactName>:<
child::Customer[child::ContactName]
En este ejemplo se supone que ContactName >< es un elemento secundario del <elemento Customer> del documento XML, que se conoce 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< el elemento>> es el tipo de nodo principal para child
el eje). 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 solo los elementos secundarios del elemento Customer> del nodo de contexto que tienen< elementos secundarios del elemento ContactName>.<
Con la sintaxis abreviada, la consulta XPath también se puede especificar como:
Customer[ContactName]
Predicado de selección: ejemplo 4
La siguiente expresión XPath selecciona elementos secundarios del elemento Customer> del nodo de contexto que no tienen< elementos secundarios del elemento ContactName>:<
child::Customer[not(child::ContactName)]
En este ejemplo se supone que <ContactName> es un elemento secundario del <elemento Customer> del documento XML y el campo ContactName no es necesario 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 en el 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 con 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
.
Consulte también
Introducción a los esquemas XSD anotados (SQLXML 4.0)
Aplicación de formato XML en el cliente (SQLXML 4.0)