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 gli esempi XPath (SQLXML 4.0).

Esempi

A.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 e Contact è il test di nodo (TRUE se Contact è un nodo <element>, in quanto <element> è 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

  1. Copiare il codice dello schema di esempio e incollarlo in un file di testo. Salvare il file con il nome SampleSchema1.xml.

  2. 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"
    
  3. Creare e utilizzare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire il modello.

    Per ulteriori informazioni, vedere Utilizzo 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 <Order> figli dell'elemento <Customer> figli del nodo di contesto:

/child::Customer/child::Order

Nella query child è l'asse e Customer e Order sono i test di nodo (TRUE se Customer e Order sono nodi <element>, in quanto il nodo <element> è il nodo primario per l'asse child). Per ogni nodo che corrisponde a <Customer> vengono aggiunti nodi corrispondenti a <Orders> 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

  1. Copiare il codice dello schema di esempio e incollarlo in un file di testo. Salvare il file con il nome SampleSchema1.xml.

  2. 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"
    
  3. Creare e utilizzare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire il modello.

    Per ulteriori informazioni, vedere Utilizzo 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 è specificata come Customer/Order/OrderDetail, da ogni nodo che corrisponde a <Customer> la query passa ai relativi elementi <Order>. Per ogni nodo che corrisponde a <Order>, inoltre, la query aggiunge i nodi <OrderDetail> al risultato. Nel set di risultati viene restituito solo <OrderDetail>.

C.Utilizzare ..per specificare l'asse padre

Nella query seguente vengono recuperati tutti gli elementi <Order> con un elemento <Customer> padre il cui valore di attributo CustomerID è 1. La query utilizza l'asse child nel predicato per trovare il 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 XPath /Order[../@CustomerID="1"] restituirà un errore perché non è presente alcun padre di <Order>. Benché nello schema di mapping possano essere presenti elementi che contengono <Order>, XPath non è iniziato in corrispondenza di alcuno di questi e, di conseguenza, <Order> viene considerato come il tipo di elemento di livello principale nel documento.

Per testare la query Xpath sullo schema di mapping

  1. Copiare il codice dello schema di esempio e incollarlo in un file di testo. Salvare il file con il nome SampleSchema1.xml.

  2. 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"
    
  3. Creare e utilizzare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire il modello.

    Per ulteriori informazioni, vedere Utilizzo 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 il cui valore di attributo CustomerID è 1.

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

Nel predicato attribute::CustomerID, attribute è l'asse e CustomerID è il test di nodo (se CustomerID è un attributo, il test di nodo è TRUE, poiché il nodo <attribute> è il nodo principale dell'asse attribute).

È 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

  1. Copiare il codice dello schema di esempio e incollarlo in un file di testo. Salvare il file con il nome SampleSchema1.xml.

  2. 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"
    
  3. Creare e utilizzare lo script di test SQLXML 4.0 (Sqlxml4test.vbs) per eseguire il modello.

    Per ulteriori informazioni, vedere Utilizzo 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>