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. Customer
est 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. Customer
est 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. Customer
est 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)