Especificando predicados de seleção no caminho do local (SQLXML 4.0)
Um predicado filtra um conjunto de nós com respeito a um eixo (semelhantemente a uma cláusula WHERE em uma instrução SELECT). O predicado é especificado entre colchetes. Para cada nó no conjunto de nós a ser filtrado, a expressão de predicado é avaliada com esse nó como o nó de contexto, com o número de nós no conjunto de nós como o tamanho do contexto. Se a expressão de predicado for avaliada como TRUE para esse nó, o nó será incluído no conjunto de nós resultante.
XPath também permite a filtragem com base na posição. Uma expressão de predicado avaliada como um número seleciona esse nó ordinal. Por exemplo, o caminho do local Customer[3] retorna o terceiro cliente. Não há suporte para tais predicados numéricos. Há suporte somente para expressões de predicado que retornem um resultado Boolean.
Observação |
---|
Para obter informações sobre as limitações desta implementação XPath do XPath e as diferenças entre ela e a especificação W3C, consulte Introdução para usar consultas XPath (SQLXML 4.0). |
Predicado de seleção: Exemplo 1
A seguinte expressão XPath (caminho de local) seleciona no nó de contexto atual todos os filhos do elemento <Customer> que tenham o atributo CustomerID com valor ALFKI:
/child::Customer[attribute::CustomerID="ALFKI"]
Nesta consulta do XPath, child e attribute são nomes de eixos. Customer é o nó de teste (TRUE se Customer for um <nó de elemento>, porque <elemento> é o tipo de nó principal para o eixo child ). attribute::CustomerID="ALFKI" é o predicado. No predicado, attribute é o eixo e CustomerID é o teste de nó (TRUE se CustomerID for um atributo do nó de contexto, porque <attribute> é o tipo de nó principal do eixo attribute).
Usando a sintaxe abreviada, a consulta XPath também pode ser especificada como:
/Customer[@CustomerID="ALFKI"]
Predicado de seleção: Exemplo 2
A seguinte expressão XPath (caminho de local) seleciona no nó de contexto atual todos os netos do elemento <Order> que tenham o atributo SalesOrderID com valor 1:
/child::Customer/child::Order[attribute::SalesOrderID="1"]
Nesta expressão XPath, child e attribute são os nomes de eixo. Customer, Order e SalesOrderID são os nós de teste. attribute::OrderID="1" é o predicado.
Usando a sintaxe abreviada, a consulta XPath também pode ser especificada como:
/Customer/Order[@SalesOrderID="1"]
Predicado de seleção: Exemplo 3
A seguinte expressão XPath (caminho de local) seleciona do nó de contexto atual todos os filhos de <Customer> crianças que tenham um ou mais filhos de <ContactName>:
child::Customer[child::ContactName]
Este exemplo assume que <ContactName> é um elemento filho do elemento <Customer> no documento XML, que é chamado de mapeamento centrado em elemento em um esquema XSD anotado.
Nesta expressão XPath, child é o nome do eixo. Customer é o teste de no (TRUE se Customer for um nó <element>, porque <element> é o tipo de nó principal para o eixo child). child::ContactName é o predicado. No predicado, child é o eixo e ContactName é o teste de nó (TRUE se ContactName for um nó <element>).
Essa expressão retorna somente os filhos do elemento <Customer> do nó de contexto que tenham os filhos do elemento <ContactName>.
Usando a sintaxe abreviada, a consulta XPath também pode ser especificada como:
Customer[ContactName]
Predicado de seleção: Exemplo 4
A seguinte expressão XPath seleciona os filhos do elemento <Customer> do nó de contexto que não tenham os filhos do elemento <ContactName>:
child::Customer[not(child::ContactName)]
Este exemplo assume que <ContactName> é um elemento filho do elemento <Customer> no documento XML e que o campo ContactName não é obrigatório no banco de dados.
Neste exemplo, child é o eixo. Customer é o teste de nó (TRUE se Customer for um nó <element>). not(child::ContactName) é o predicado. No predicado, child é o eixo e ContactName é o teste de nó (TRUE se ContactName for um nó <element>).
Usando a sintaxe abreviada, a consulta XPath também pode ser especificada como:
Customer[not(ContactName)]
Predicado de seleção: Exemplo 5
A seguinte expressão XPath seleciona do nó de contexto atual todos os filhos de <Customer> que têm o atributo CustomerID:
child::Customer[attribute::CustomerID]
Neste exemplo, child é o eixo e Customer é o teste de nó (TRUE se Customer for um nó <element>). attribute::CustomerID é o predicado. No predicado, attribute é o eixo e CustomerID é o predicado (TRUE se CustomerID for um nó <attribute>).
Usando a sintaxe abreviada, a consulta XPath também pode ser especificada como:
Customer[@CustomerID]
Predicado de seleção: Exemplo 6
O Microsoft SQLXML 4.0 inclui suporte para consultas XPath que contenham um produto cruzado no predicado, conforme mostrado no seguinte exemplo:
Customer[Order/@OrderDate=Order/@ShipDate]
Esta consulta seleciona todos os clientes com qualquer Order para o qual OrderDate é igual a qualquer ShipDate de qualquer Order.
Consulte também