Compartilhar via


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çãoObservaçã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.