Condividi tramite


Specificare i predicati Boolean-Valued nelle query di XPath (SQLXML 4.0)

Negli esempi seguenti viene illustrato come vengono specificati predicati booleani nelle query XPath. Le query XPath in 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

Un. Specificare più predicati

La query XPath seguente usa più predicati per trovare informazioni sugli ordini per un ID ordine e un ID cliente specificati:

/child::Customer[attribute::CustomerID="1"]/child::Order[attribute::OrderID="Ord-43860"]  

È possibile specificare un collegamento all'asse attribute (@) e, poiché l'asse è l'impostazione child predefinita, può essere omesso dalla query:

/Customer[@CustomerID="1"]/Order[@SalesOrderID="Ord-43860"]  
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 come SampleSchema1.xml.

  2. Creare il modello seguente (BooleanValuedPredicatesA.xml) e salvarlo nella directory in cui SampleSchema1.xml viene salvato.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="SampleSchema1.xml">  
        /Customer[@CustomerID="1"]/Order[@SalesOrderID="Ord-43860"]  
      </sql:xpath-query>  
    </ROOT>  
    

    Il percorso della directory specificato per lo schema di mapping (SampleSchema1.xml) è relativo alla directory in cui viene 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 altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.

    Questa è la formula:

    <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>  
    

B. Specificare predicati successivi e annidati

La query seguente illustra l'uso di predicati successivi. La query restituisce tutti gli <elementi figlio Customer> del nodo di contesto con un attributo SalesPersonID con un valore 277 e un attributo TerritoryID con valore 3:

/child::Customer[attribute::SalesPersonID="277"][attribute::TerritoryID="3"]  

La query restituisce gli <elementi Customer> che soddisfano entrambe le condizioni specificate nei predicati.

È possibile specificare un collegamento all'asse attribute (@) e, poiché l'asse è l'impostazione child predefinita, può essere omesso dalla query:

/Customer[@SalesPersonID="277"][@TerritoryID="3"]  

La query XPath seguente illustra l'uso di predicati annidati. La query restituisce tutti gli <elementi figlio Customer> del nodo di contesto che includono <gli elementi figlio Order con almeno un elemento Order>>con un valore di attributo SalesPersonID pari a 2.<

/Customer[Order[@SalesPersonID=2]]  
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 come SampleSchema1.xml.

  2. Creare il modello seguente (nestedSuccessive.xml) e salvarlo nella directory in cui SampleSchema1.xml viene salvato.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="SampleSchema1.xml">  
             /Customer[@SalesPersonID="277"][@TerritoryID="3"]  
      </sql:xpath-query>  
    </ROOT>  
    

    Il percorso della directory specificato per lo schema di mapping (SampleSchema1.xml) è relativo alla directory in cui viene 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 altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.

Di seguito è riportato un risultato parziale:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Customer CustomerID="22" SalesPersonID="277" TerritoryID="3"   
            AccountNumber="22" CustomerType="S"   
            Orders="Ord-43874 Ord-44519 Ord-46989 Ord-48013 Ord-49130 Ord-50274 Ord-51807 Ord-57113 Ord-63162 Ord-69495">  
    <Order SalesOrderID="Ord-43874" SalesPersonID="277"   
           OrderDate="2001-08-01T00:00:00"   
           DueDate="2001-08-13T00:00:00"   
           ShipDate="2001-08-08T00:00:00">  
      <OrderDetail ProductID="Prod-763" UnitPrice="503.3507"   
                   OrderQty="1" UnitPriceDiscount="0" />   
    </Order>  
    ...  
  </Customer>  
  <Customer CustomerID="39" SalesPersonID="277" TerritoryID="3"   
            AccountNumber="39" CustomerType="S"   
            Orders="Ord-47428 Ord-48367 Ord-49529 Ord-50742 Ord-53591 Ord-59051 Ord-65301 Ord-71912">    <Order SalesOrderID="Ord-47428" SalesPersonID="277"   
           OrderDate="2002-09-01T00:00:00"   
           DueDate="2002-09-13T00:00:00"   
           ShipDate="2002-09-08T00:00:00">  
      <OrderDetail ProductID="Prod-759" UnitPrice="563.7528" OrderQty="2" UnitPriceDiscount="0" />   
      <OrderDetail ProductID="Prod-769" UnitPrice="563.7528" OrderQty="1" UnitPriceDiscount="0" />   
      ...  
    </Order>  
    ...  
  </Customer>  
  ...  
</ROOT>  

C. Specificare un predicato di primo livello

La query seguente restituisce i <nodi elemento figlio Customer> del nodo di contesto con <elementi figlio Order> figlio. La query verifica il percorso come predicato di primo livello:

/child::Customer[child::Order]  

L'asse child è l'impostazione predefinita. Di conseguenza, la query può essere specificata come:

/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 come SampleSchema1.xml.

  2. Creare il modello seguente (TopLevelPredicate.xml) e salvarlo nella directory in cui SampleSchema1.xml viene salvato.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="SampleSchema1.xml">  
        /Customer[Order]  
      </sql:xpath-query>  
    </ROOT>  
    

    Il percorso della directory specificato per lo schema di mapping (SampleSchema1.xml) è relativo alla directory in cui viene 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 altre informazioni, vedere Uso di ADO per eseguire query SQLXML 4.0.

Ecco il risultato parziale:

<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>  
    <Order SalesOrderID="Ord-44501" SalesPersonID="280" OrderDate="2001-11-01T00:00:00" DueDate="2001-11-13T00:00:00" ShipDate="2001-11-08T00:00:00">  
      <OrderDetail ProductID="Prod-725" UnitPrice="226.8571" OrderQty="3" UnitPriceDiscount="0" />   
      <OrderDetail ProductID="Prod-726" UnitPrice="226.8571" OrderQty="2" UnitPriceDiscount="0" />   
      ...  
    </Order>    ...  
  </Customer>  
  ...  
</ROOT>