Partager via


Spécification de prédicats de sélection dans le chemin d'accès d'emplacement (SQLXML 4.0)

S’applique à : SQL Server Azure SQL Database

Un prédicat filtre un élément node-set par rapport à un axe (semblable à une clause WHERE dans une instruction SELECT). Le prédicat est spécifié entre crochets. Pour chaque nœud de l'élément node-set à filtrer, l'expression de prédicat est évaluée avec ce nœud en tant que nœud de contexte et avec le nombre de nœuds de l'élément node-set en tant que taille de contexte. Si l'expression de prédicat prend la valeur TRUE pour ce nœud, ce dernier est inclus dans l'élément node-set obtenu.

XPath autorise également un filtrage basé sur les positions. Une expression de prédicat qui correspond à un nombre sélectionne ce nœud ordinal. Par exemple, le chemin d'accès d'emplacement Customer[3] retourne le troisième client. De tels prédicats numériques ne sont pas pris en charge. Seules les expressions de prédicat qui retournent un résultat booléen sont prises en charge.

Remarque

Pour plus d’informations sur les limitations de cette implémentation XPath de XPath et les différences entre celle-ci et la spécification W3C, consultez Présentation de l’utilisation de requêtes XPath (SQLXML 4.0).

Prédicat de sélection : exemple 1

L’expression XPath (chemin d’emplacement) suivante sélectionne à partir du nœud de contexte actuel tous les enfants de l’élément <Customer> qui ont l’attribut CustomerID avec la valeur DLFKI :

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

Dans cette requête XPath, child et attribute sont les noms d'axes. Customerest le test de nœud (TRUE s’il s’agit Customer d’un nœud> d’élément<, car <l’élément> est le type de nœud principal de l’axe).child attribute::CustomerID="ALFKI" est le prédicat. Dans le prédicat, attribute est l’axe et CustomerID est le test de nœud (TRUE si CustomerID est un attribut du nœud de contexte, car< l’attribut> est le type de nœud principal de l’axe d’attribut).

À l'aide de la syntaxe abrégée, la requête XPath peut également être spécifiée de la façon suivante :

/Customer[@CustomerID="ALFKI"]  

Prédicat de sélection : Exemple 2

L’expression XPath suivante (chemin d’emplacement) sélectionne dans le nœud de contexte actuel tous les <petits-enfants Order> qui ont l’attribut SalesOrderID avec la valeur 1 :

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

Dans cette expression XPath, child et attribute sont les noms des axes. Customer, Order et SalesOrderID sont les tests de nœud. attribute::OrderID="1" est le prédicat.

À l'aide de la syntaxe abrégée, la requête XPath peut également être spécifiée de la façon suivante :

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

Prédicat de sélection : exemple 3

L’expression XPath suivante (chemin d’accès d’emplacement) est sélectionnée à partir du nœud de contexte actuel pour tous les enfants clients> qui ont un ou plusieurs< enfants ContactName> :<

child::Customer[child::ContactName]  

Cet exemple suppose que ContactName ><est un élément enfant de l’élément <Customer> dans le document XML, appelé mappage centré sur les éléments dans un schéma XSD annoté.

Dans cette expression XPath, child est le nom de l'axe. Customerest le test de nœud (TRUE s’il s’agit Customer d’un nœud d’élément><, car <l’élément> est le type de nœud principal pour child l’axe). child::ContactName est le prédicat. Dans le prédicat, child est l’axe et ContactName est le test de nœud (TRUE s’il ContactName s’agit d’un nœud d’élément<>).

Cette expression retourne uniquement les enfants de l’élément <Customer> du nœud de contexte qui ont <des enfants d’élément ContactName.>

À l'aide de la syntaxe abrégée, la requête XPath peut également être spécifiée de la façon suivante :

Customer[ContactName]  

Prédicat de sélection : exemple 4

L’expression XPath suivante sélectionne les enfants de l’élément Customer> du nœud de contexte qui n’ont <pas d’enfants d’élément ContactName> :<

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

Cet exemple suppose que ContactName> est un élément enfant de l’élément <Customer> dans le document XML et que le champ ContactName n’est pas obligatoire dans la base de données.<

Dans cet exemple, child est l'axe. Customerest le test de nœud (TRUE s’il s’agit Customer d’un nœud d’élément<>). not(child::ContactName) est le prédicat. Dans le prédicat, child est l’axe et ContactName est le test de nœud (TRUE s’il ContactName s’agit d’un nœud d’élément<>).

À l'aide de la syntaxe abrégée, la requête XPath peut également être spécifiée de la façon suivante :

Customer[not(ContactName)]  

Prédicat de sélection : exemple 5

L’expression XPath suivante sélectionne à partir du nœud de contexte actuel tous les enfants customer> qui ont l’attribut CustomerID :<

child::Customer[attribute::CustomerID]  

Dans cet exemple, child est l’axe et Customer test de nœud (TRUE s’il Customer s’agit d’un nœud d’élément<>). attribute::CustomerID est le prédicat. Dans le prédicat, attribute est l’axe et CustomerID est le prédicat (TRUE s’il CustomerID s’agit d’un nœud d’attribut<>).

À l'aide de la syntaxe abrégée, la requête XPath peut également être spécifiée de la façon suivante :

Customer[@CustomerID]  

Prédicat de sélection : exemple 6

Microsoft SQLXML 4.0 inclut la prise en charge des requêtes XPath qui contiennent un produit croisé dans le prédicat, comme illustré dans l’exemple suivant :

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

Cette requête sélectionne tous les clients avec un Order quelconque pour lequel OrderDate est égal au ShipDate de tout Order.

Voir aussi

Introduction aux schémas XSD annotés (SQLXML 4.0)
Mise en forme XML côté client (SQLXML 4.0)