Definizione di assi in query XPath (SQLXML 4.0)
Negli esempi seguenti viene illustrato il modo in cui specificare assi in query XPath.
Le query XPath di questi esempi vengono specificate sullo schema di mapping contenuto in SampleSchema1.xml. Per informazioni su questo schema di esempio, vedere Schema XSD con annotazioni di esempio per esempi XPath (SQLXML 4.0).
Esempi
R. Recuperare elementi figlio del nodo di contesto
La query XPath seguente seleziona tutti gli <elementi figlio Contact> del nodo di contesto:
/child::Contact
Nella query è child
l'asse ed Contact
è il test del nodo (TRUE se Contact
è un <nodo elemento> , perché <l'elemento> è il tipo di nodo primario associato all'asse child
).
L'asse child
è l'asse predefinito. È pertanto possibile scrivere la query nel modo seguente:
/Contact
Per testare la query Xpath sullo schema di mapping
Copiare il codice dello schema di esempio e incollarlo in un file di testo. Salvare il file con il nome SampleSchema1.xml.
Creare il modello seguente (XPathAxesSampleA.xml) e salvarlo nella directory in cui è stato salvato il file SampleSchema1.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Contact </sql:xpath-query> </ROOT>
Il percorso di directory specificato per lo schema di mapping SampleSchema1.xml è relativo alla directory in cui è salvato il modello. È possibile specificare anche un percorso assoluto, ad esempio:
mapping-schema="C:\MyDir\SampleSchema1.xml"
Creare e utilizzare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire il modello.
Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
Di seguito viene indicato il set di risultati parziale dell'esecuzione del modello:
<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. Recuperare nipoti del nodo di contesto
La query XPath seguente seleziona tutti gli elementi figlio dell'elemento< Order> dell'elemento <Customer> figlio del nodo di contesto:
/child::Customer/child::Order
Nella query è child
l'asse e Customer
Order
sono i test dei nodi ( questi test di nodo sono TRUE se Customer e Order sono <nodi elemento> , perché il <nodo elemento> è il nodo primario per l'asse child
). Per ogni nodo corrispondente <a Customer>, i nodi corrispondenti <agli Ordini> vengono aggiunti al risultato. Nel set di risultati viene restituito solo <Order> .
L'asse child
è l'asse predefinito. È pertanto possibile specificare la query nel modo seguente:
/Customer/Order
Per testare la query Xpath sullo schema di mapping
Copiare il codice dello schema di esempio e incollarlo in un file di testo. Salvare il file con il nome SampleSchema1.xml.
Creare il modello seguente (XPathAxesSampleB.xml) e salvarlo nella directory in cui:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Customer/Order </sql:xpath-query> </ROOT>
Il percorso di directory specificato per lo schema di mapping SampleSchema1.xml è relativo alla directory in cui è salvato il modello. È possibile specificare anche un percorso assoluto, ad esempio:
mapping-schema="C:\MyDir\SampleSchema1.xml"
Creare e utilizzare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire il modello.
Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
Di seguito viene indicato il set di risultati parziale dell'esecuzione del modello:
<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>
Se la query XPath viene specificata come Customer/Order/OrderDetail
, da ogni nodo corrispondente a <Customer> la query passa ai relativi <elementi Order> . Per ogni nodo corrispondente <a Order>, la query aggiunge i nodi <OrderDetail> al risultato. Nel set di risultati viene restituito solo <OrderDetail> .
C. Utilizzare . per specificare l'asse padre
La query seguente recupera tutti gli <elementi Order> con un elemento Customer padre <con un valore di attributo CustomerID> pari a 1. La query usa l'asse child
nel predicato per trovare l'elemento padre dell'elemento <Order> .
/child::Customer/child::Order[../@CustomerID="1"]
L'asse child
è l'asse predefinito. È pertanto possibile specificare la query nel modo seguente:
/Customer/Order[../@CustomerID="1"]
La query XPath è equivalente a:
/Customer[@CustomerID="1"]/Order.
Nota
La query /Order[../@CustomerID="1"]
XPath restituirà un errore perché non è presente alcun elemento padre di <Order>. Sebbene siano presenti elementi nello schema di mapping che contengono <Order>, l'oggetto XPath non ha iniziato ad alcun elemento. Di conseguenza, <Order> viene considerato il tipo di elemento di primo livello nel documento.
Per testare la query Xpath sullo schema di mapping
Copiare il codice dello schema di esempio e incollarlo in un file di testo. Salvare il file con il nome SampleSchema1.xml.
Creare il modello seguente (XPathAxesSampleC.xml) e salvarlo nella directory in cui:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="SampleSchema1.xml"> /Customer/Order[../@CustomerID="1"] </sql:xpath-query> </ROOT>
Il percorso di directory specificato per lo schema di mapping SampleSchema1.xml è relativo alla directory in cui è salvato il modello. È possibile specificare anche un percorso assoluto, ad esempio:
mapping-schema="C:\MyDir\SampleSchema1.xml"
Creare e utilizzare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire il modello.
Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
Di seguito viene indicato il set di risultati parziale dell'esecuzione del modello:
<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. Specificare l'asse attribute
La query XPath seguente seleziona tutti gli <elementi figlio Customer> del nodo di contesto con un valore di attributo CustomerID pari a 1:
/child::Customer[attribute::CustomerID="1"]
Nel predicato è l'asse ed CustomerID
è il test del nodo (se CustomerID
è un attributo il test del nodo è TRUE, perché il <nodo dell'attributo> è il nodo primario per l'asseattribute
). attribute
attribute::CustomerID
È possibile specificare un collegamento all'asse attribute
(@) e, poiché l'asse child
è l'asse predefinito, può essere omesso dalla query:
/Customer[@CustomerID="1"]
Per testare la query Xpath sullo schema di mapping
Copiare il codice dello schema di esempio e incollarlo in un file di testo. Salvare il file con il nome SampleSchema1.xml.
Creare il modello seguente (XPathAxesSampleD.xml) e salvarlo nella directory in cui è stato salvato il file 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>
Il percorso di directory specificato per lo schema di mapping SampleSchema1.xml è relativo alla directory in cui è salvato il modello. È possibile specificare anche un percorso assoluto, ad esempio:
mapping-schema="C:\MyDir\SampleSchema1.xml"
Creare e utilizzare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire il modello.
Per altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.
Di seguito viene indicato il set di risultati parziale dell'esecuzione del modello:
<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>