Specificering av axlar i XPath-frågor (SQLXML 4.0)

gäller för:SQL ServerAzure SQL Database

Följande exempel visar hur axlar specificeras i XPath-frågor.

XPath-frågorna i dessa exempel specificeras mot mappningsschemat som finns i SampleSchema1.xml. För information om detta exempelschema, se Exempel annoterat XSD-schema för XPath-exempel (SQLXML 4.0).

Examples

A. Hämta barnelement i kontextnoden

Följande XPath-fråga väljer alla <Kontaktbarn-element> i kontextnoden:

/child::Contact  

I frågan child är axeln och Contact är nodtestet (SANT om Contact är en <elementnod> , eftersom <elementet> är den primära nodtypen associerad med axeln child ).

Axeln child är standard. Därför kan frågan skrivas som:

/Contact  
För att testa XPath-frågan mot mappningsschemat
  1. Kopiera exempelschemakoden och klistra in den i en textfil. Spara filen som SampleSchema1.xml.

  2. Skapa följande mall (XPathAxesSampleA.xml) och spara den i katalogen där SampleSchema1.xml sparades.

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

    Den katalogväg som anges för mappningsschemat (SampleSchema1.xml) är relativ till katalogen där mallen sparas. En absolut väg kan också specificeras, till exempel:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra mallen.

    Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.

Här är den delvisa resultatuppsättningen för mallens exekvering:

<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. Hämta barnbarn till kontextnoden

Följande XPath-fråga väljer alla <Order-elementbarn> till <Customer-elementbarnen> till kontextnoden:

/child::Customer/child::Order  

I frågan child är axeln och Customer och Order är nodtesterna (dessa nodtester är SANNA om Customer och Order är <elementnoder> , eftersom <elementnoden> är primärnoden för barnaxeln ). För varje nod som matchar <kund> läggs noder som matchar <order> till resultatet. Endast <Order> returneras i resultatuppsättningen.

Barnaxeln är standard. Därför kan frågan specificeras som:

/Customer/Order  
För att testa XPath-frågan mot mappningsschemat
  1. Kopiera exempelschemakoden och klistra in den i en textfil. Spara filen som SampleSchema1.xml.

  2. Skapa följande mall (XPathAxesSampleB.xml) och spara den i katalogen där:

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

    Den katalogväg som anges för mappningsschemat (SampleSchema1.xml) är relativ till katalogen där mallen sparas. En absolut väg kan också specificeras, till exempel:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra mallen.

    Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.

Här är den delvisa resultatuppsättningen för mallens exekvering:

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

Om XPath-frågan anges som Customer/Order/OrderDetail, från varje nod som matchar <Kund> , navigerar frågan till dess <Order-element> . Och för varje nod som matchar <Order> lägger frågan till nodernas <OrderDetail> till resultatet. Endast <OrderDetail> returneras i resultatuppsättningen.

C. Använda.. för att specificera föräldraaxeln

Följande fråga hämtar alla <Order-element> med ett föräldra-Kund-element <> med ett CustomerID-attribut på 1. Frågan använder barnaxeln i predikatet för att hitta föräldern till Order-elementet<>.

/child::Customer/child::Order[../@CustomerID="1"]  

Barnaxeln är standardaxeln. Därför kan frågan specificeras som:

/Customer/Order[../@CustomerID="1"]  

XPath-frågan är ekvivalent med:

/Customer[@CustomerID="1"]/Order.  

Anmärkning

XPath-frågan /Order[../@CustomerID="1"] kommer att returnera ett fel eftersom det inte finns någon förälder till <Order>. Även om det kan finnas element i mappningsschemat som innehåller <Order>, började inte XPath vid något av dem; följaktligen <anses Order> vara den övergripande elementtypen i dokumentet.

För att testa XPath-frågan mot mappningsschemat
  1. Kopiera exempelschemakoden och klistra in den i en textfil. Spara filen som SampleSchema1.xml.

  2. Skapa följande mall (XPathAxesSampleC.xml) och spara den i katalogen där:

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

    Den katalogväg som anges för mappningsschemat (SampleSchema1.xml) är relativ till katalogen där mallen sparas. En absolut väg kan också specificeras, till exempel:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra mallen.

    Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.

Här är den delvisa resultatuppsättningen för mallens exekvering:

<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. Ange attributaxeln

Följande XPath-fråga väljer alla <Kundbarn-element> i kontextnoden med ett CustomerID-attributvärde 1:

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

I predikatet attribute::CustomerIDär axeln attribute och CustomerID är nodtestet (om CustomerID är ett attribut är nodtestet SANT, eftersom <attributnoden> är den primära noden för axeln attribute ).

En genväg till axeln attribute (@) kan specificeras, och eftersom child är standardaxeln kan den utelämnas från frågan:

/Customer[@CustomerID="1"]  
För att testa XPath-frågan mot mappningsschemat
  1. Kopiera exempelschemakoden och klistra in den i en textfil. Spara filen som SampleSchema1.xml.

  2. Skapa följande mall (XPathAxesSampleD.xml) och spara den i katalogen där SampleSchema1.xml sparas.

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

    Den katalogväg som anges för mappningsschemat (SampleSchema1.xml) är relativ till katalogen där mallen sparas. En absolut väg kan också specificeras, till exempel:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra mallen.

    Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.

Här är den delvisa resultatuppsättningen för mallens exekvering:

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