Delen via


Het specificeren van Boolean-Valued predicaten in XPath-queries (SQLXML 4.0)

Van toepassing op:SQL ServerAzure SQL Database

De volgende voorbeelden tonen hoe Booleaan-waarde predicaten worden gespecificeerd in XPath-queries. De XPath-queries in deze voorbeelden zijn gespecificeerd tegen het mappingschema dat in SampleSchema1.xmlis opgenomen. Voor informatie over dit voorbeeldschema, zie Voorbeeld Geannoteerd XSD-schema voor XPath-voorbeelden (SQLXML 4.0).

Voorbeelden

Eén. Specificeer meerdere predicaten

De volgende XPath-query gebruikt meerdere predicaten om orderinformatie te vinden voor een bepaalde order-ID en een klant-ID:

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

Een snelkoppeling naar de attribute as (@) kan worden gespecificeerd, en omdat de child as de standaard is, kan deze uit de query worden weggelaten:

/Customer[@CustomerID="1"]/Order[@SalesOrderID="Ord-43860"]  
Om de XPath-query te testen tegen het mappingschema
  1. Kopieer de voorbeeldschemacode en plak deze in een tekstbestand. Sla het bestand op als SampleSchema1.xml.

  2. Maak de volgende template aan (BooleanValuedPredicatesA.xml) en sla deze op in de map waar SampleSchema1.xml is opgeslagen.

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

    Het directorypad dat voor het mappingschema (SampleSchema1.xml) is gespecificeerd is relatief tot de map waar het sjabloon wordt opgeslagen. Een absoluut pad kan ook worden gespecificeerd, bijvoorbeeld:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Maak het SQLXML 4.0 Test Script (Sqlxml4test.vbs) aan en gebruik het om het sjabloon uit te voeren.

    Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.

    Hier is het resultaat:

    <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. Specificeer opeenvolgende en geneste predicaten

De volgende query toont het gebruik van opeenvolgende predicaten. De query geeft alle <Customer-kindelementen> van de contextnode terug die zowel een SalesPersonID-attribuut met een waarde van 277 als een TerritoryID-attribuut met een waarde van 3 hebben:

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

De query geeft de <Customer-elementen> terug die aan beide voorwaarden voldoen die in de predicaten zijn gespecificeerd.

Een snelkoppeling naar de attribuutas (@) kan worden gespecificeerd, en omdat de kindas de standaard is, kan deze uit de zoekopdracht worden weggelaten:

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

De volgende XPath-query illustreert het gebruik van geneste predicaten. De query retourneert alle <Customer-kindelementen> van de contextnode die Order-kindelementen> bevatten<, met ten minste één <Order-element> dat een SalesPersonID-attribuutwaarde van 2 heeft.

/Customer[Order[@SalesPersonID=2]]  
Om de XPath-query te testen tegen het mappingschema
  1. Kopieer de voorbeeldschemacode en plak deze in een tekstbestand. Sla het bestand op als SampleSchema1.xml.

  2. Maak de volgende template aan (nestedSuccessive.xml) en sla deze op in de map waar SampleSchema1.xml is opgeslagen.

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

    Het directorypad dat voor het mappingschema (SampleSchema1.xml) is gespecificeerd is relatief tot de map waar het sjabloon wordt opgeslagen. Een absoluut pad kan ook worden gespecificeerd, bijvoorbeeld:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Maak het SQLXML 4.0 Test Script (Sqlxml4test.vbs) aan en gebruik het om het sjabloon uit te voeren.

    Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.

Het volgende is een gedeeltelijk resultaat:

<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. Specificeer een top-level predicaat

De volgende query geeft de <Customer-kindelementknooppunten> van de contextknoop terug die Order-elementkinderen> hebben<. De query test het locatiepad als het topniveau-predicaat:

/child::Customer[child::Order]  

De kindas is de standaard. Daarom kan de query worden gespecificeerd als:

/Customer[Order]  
Om de XPath-query te testen tegen het mappingschema
  1. Kopieer de voorbeeldschemacode en plak deze in een tekstbestand. Sla het bestand op als SampleSchema1.xml.

  2. Maak de volgende template aan (TopLevelPredicate.xml) en sla deze op in de map waar SampleSchema1.xml is opgeslagen.

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

    Het directorypad dat voor het mappingschema (SampleSchema1.xml) is gespecificeerd is relatief tot de map waar het sjabloon wordt opgeslagen. Een absoluut pad kan ook worden gespecificeerd, bijvoorbeeld:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Maak het SQLXML 4.0 Test Script (Sqlxml4test.vbs) aan en gebruik het om het sjabloon uit te voeren.

    Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.

Hier is het gedeeltelijke resultaat:

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