Spécification d'axes dans les requêtes XPath (SQLXML 4.0)
S’applique à : SQL ServerAzure SQL Database
Les exemples suivants montrent comment spécifier des axes dans les requêtes XPath.
Les requêtes XPath de ces exemples sont spécifiées par rapport au schéma de mappage contenu dans SampleSchema1.xml. Pour plus d’informations sur cet exemple de schéma, consultez Exemple de schéma XSD annoté pour les exemples XPath (SQLXML 4.0).
Exemples
R. Récupérer les éléments enfants du nœud de contexte
La requête XPath suivante sélectionne tous les <éléments enfants Contact> du nœud de contexte :
/child::Contact
Dans la requête, child
est l’axe et Contact
est le test de nœud (TRUE s’il Contact
s’agit d’un nœud d’élément><, car <l’élément> est le type de nœud principal associé à l’axe).child
L'axe child
est la valeur par défaut. Par conséquent, la requête peut être écrite sous la forme :
/Contact
Pour tester la requête XPath par rapport au schéma de mappage
Copiez l’exemple de code de schéma et collez-le dans un fichier texte. Enregistrez ce fichier sous le nom SampleSchema1.xml.
Créez le modèle ci-dessous (XPathAxesSampleA.xml) et enregistrez-le dans le même répertoire que SampleSchema1.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Contact </sql:xpath-query> </ROOT>
Le chemin d'accès au répertoire spécifié pour le schéma de mappage (SampleSchema1.xml) varie en fonction du répertoire où le modèle est enregistré. Vous pouvez également spécifier un chemin d'accès absolu, par exemple :
mapping-schema="C:\MyDir\SampleSchema1.xml"
Créez et utilisez le script de test SQLXML 4.0 (Sqlxml4test.vbs) pour exécuter le modèle.
Pour plus d'informations, voir Utilisation d'ADO pour exécuter des requêtes SQLXML 4.0.
Voici le jeu de résultats partiel de l'exécution du modèle :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Contact ContactID="1" LastName="Achong" FirstName="Gustavo" Title="Mr." />
<Contact ContactID="2" LastName="Abel" FirstName="Catherine" Title="Ms." />
<Contact ContactID="3" LastName="Abercrombie" FirstName="Kim" Title="Ms." />
<Contact ContactID="4" LastName="Acevedo" FirstName="Humberto" Title="Sr." />
...
</ROOT>
B. Récupérer les petits-enfants du nœud de contexte
La requête XPath suivante sélectionne tous les enfants de l’élément <Order> des enfants de l’élément< Customer> du nœud de contexte :
/child::Customer/child::Order
Dans la requête, child
est l’axe et Order
Customer
sont les tests de nœud (ces tests de nœud sont VRAIs si Customer et Order sont< des nœuds d’élément>, car le <nœud d’élément> est le nœud principal de l’axe enfant). Pour chaque client> correspondant <à chaque nœud, les nœuds correspondant <aux commandes> sont ajoutés au résultat. Seule <la commande> est retournée dans le jeu de résultats.
L’axe enfant est la valeur par défaut. Par conséquent, la requête peut être spécifiée sous la forme :
/Customer/Order
Pour tester la requête XPath par rapport au schéma de mappage
Copiez l’exemple de code de schéma et collez-le dans un fichier texte. Enregistrez ce fichier sous le nom SampleSchema1.xml.
Créez le modèle suivant (XPathAxesSampleB.xml) et enregistrez-le dans le répertoire où :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Customer/Order </sql:xpath-query> </ROOT>
Le chemin d'accès au répertoire spécifié pour le schéma de mappage (SampleSchema1.xml) varie en fonction du répertoire où le modèle est enregistré. Vous pouvez également spécifier un chemin d'accès absolu, par exemple :
mapping-schema="C:\MyDir\SampleSchema1.xml"
Créez et utilisez le script de test SQLXML 4.0 (Sqlxml4test.vbs) pour exécuter le modèle.
Pour plus d'informations, voir Utilisation d'ADO pour exécuter des requêtes SQLXML 4.0.
Voici le jeu de résultats partiel de l'exécution du modèle :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Order SalesOrderID="Ord-43860" SalesPersonID="280"
OrderDate="2001-08-01T00:00:00"
DueDate="2001-08-13T00:00:00"
ShipDate="2001-08-08T00:00:00">
<OrderDetail ProductID="Prod-729" UnitPrice="226.8571"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-732" UnitPrice="440.1742"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-738" UnitPrice="220.2496"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-753" UnitPrice="2576.3544"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-756" UnitPrice="1049.7528"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-758" UnitPrice="1049.7528"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-761" UnitPrice="503.3507"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-762" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-763" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-765" UnitPrice="503.3507"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-768" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-770" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
</Order>
...
</ROOT>
Si la requête XPath est spécifiée en tant que Customer/Order/OrderDetail
, à partir de chaque nœud correspondant< au client>, la requête accède à ses< éléments Order.> Et pour chaque nœud correspondant à Order>, la requête ajoute les nœuds< OrderDetail> au résultat.< Seul <OrderDetail> est retourné dans le jeu de résultats.
C. Utiliser... pour spécifier l'axe parent
La requête suivante récupère tous les <éléments Order> avec un élément Customer> parent< avec une valeur d’attribut CustomerID de 1. La requête utilise l’axe enfant dans le prédicat pour rechercher le parent de l’élément< Order>.
/child::Customer/child::Order[../@CustomerID="1"]
L’axe enfant est l’axe par défaut. Par conséquent, la requête peut être spécifiée sous la forme :
/Customer/Order[../@CustomerID="1"]
La requête XPath est équivalente à :
/Customer[@CustomerID="1"]/Order.
Remarque
La requête /Order[../@CustomerID="1"]
XPath retourne une erreur, car il n’existe aucun parent de <Order>. Bien qu’il puisse y avoir des éléments dans le schéma de mappage qui contiennent <Order>, le XPath n’a pas commencé à aucun d’entre eux ; par conséquent,< Order> est considéré comme le type d’élément de niveau supérieur dans le document.
Pour tester la requête XPath par rapport au schéma de mappage
Copiez l’exemple de code de schéma et collez-le dans un fichier texte. Enregistrez ce fichier sous le nom SampleSchema1.xml.
Créez le modèle suivant (XPathAxesSampleC.xml) et enregistrez-le dans le répertoire où :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Customer/Order[../@CustomerID="1"] </sql:xpath-query> </ROOT>
Le chemin d'accès au répertoire spécifié pour le schéma de mappage (SampleSchema1.xml) varie en fonction du répertoire où le modèle est enregistré. Vous pouvez également spécifier un chemin d'accès absolu, par exemple :
mapping-schema="C:\MyDir\SampleSchema1.xml"
Créez et utilisez le script de test SQLXML 4.0 (Sqlxml4test.vbs) pour exécuter le modèle.
Pour plus d'informations, voir Utilisation d'ADO pour exécuter des requêtes SQLXML 4.0.
Voici le jeu de résultats partiel de l'exécution du modèle :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Order SalesOrderID="Ord-43860" SalesPersonID="280"
OrderDate="2001-08-01T00:00:00"
DueDate="2001-08-13T00:00:00"
ShipDate="2001-08-08T00:00:00">
<OrderDetail ProductID="Prod-729" UnitPrice="226.8571"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-732" UnitPrice="440.1742"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-738" UnitPrice="220.2496"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-753" UnitPrice="2576.3544"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-756" UnitPrice="1049.7528"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-758" UnitPrice="1049.7528"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-761" UnitPrice="503.3507"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-762" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-763" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-765" UnitPrice="503.3507"
OrderQty="2" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-768" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-770" UnitPrice="503.3507"
OrderQty="1" UnitPriceDiscount="0" />
</Order>
...
</Order>
</ROOT>
D. Spécifier l'axe attribute
La requête XPath suivante sélectionne tous les <éléments enfants Customer> du nœud de contexte avec une valeur d’attribut CustomerID de 1 :
/child::Customer[attribute::CustomerID="1"]
Dans le prédicatattribute::CustomerID
, attribute
est l’axe et CustomerID
est le test de nœud (s’il CustomerID
s’agit d’un attribut que le test de nœud a la valeur TRUE, car le< nœud d’attribut> est le nœud principal de l’axeattribute
).
Il est possible de spécifier un raccourci vers l'axe attribute
(@), et l'axe child
étant l'axe par défaut, il peut être omis dans la requête :
/Customer[@CustomerID="1"]
Pour tester la requête XPath par rapport au schéma de mappage
Copiez l’exemple de code de schéma et collez-le dans un fichier texte. Enregistrez ce fichier sous le nom SampleSchema1.xml.
Créez le modèle ci-dessous (XPathAxesSampleD.xml) et enregistrez-le dans le même répertoire que SampleSchema1.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> child::Customer[attribute::CustomerID="1"] </sql:xpath-query> </ROOT>
Le chemin d'accès au répertoire spécifié pour le schéma de mappage (SampleSchema1.xml) varie en fonction du répertoire où le modèle est enregistré. Vous pouvez également spécifier un chemin d'accès absolu, par exemple :
mapping-schema="C:\MyDir\SampleSchema1.xml"
Créez et utilisez le script de test SQLXML 4.0 (Sqlxml4test.vbs) pour exécuter le modèle.
Pour plus d'informations, voir Utilisation d'ADO pour exécuter des requêtes SQLXML 4.0.
Voici le jeu de résultats partiel de l'exécution du modèle :
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customer CustomerID="1" SalesPersonID="280"
TerritoryID="1" AccountNumber="1"
CustomerType="S" Orders="Ord-43860 Ord-44501 Ord-45283 Ord-46042">
<Order SalesOrderID="Ord-43860" SalesPersonID="280"
OrderDate="2001-08-01T00:00:00"
DueDate="2001-08-13T00:00:00"
ShipDate="2001-08-08T00:00:00">
<OrderDetail ProductID="Prod-729" UnitPrice="226.8571"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-732" UnitPrice="440.1742"
OrderQty="1" UnitPriceDiscount="0" />
<OrderDetail ProductID="Prod-738" UnitPrice="220.2496"
OrderQty="1" UnitPriceDiscount="0" />
...
</Order>
...
</Customer>
</ROOT>