Sdílet prostřednictvím


Specifikace os v XPath dotazech (SQLXML 4.0)

platí pro:SQL Serverazure SQL Database

Následující příklady ukazují, jak jsou osy specifikovány v dotazech XPath.

XPath dotazy v těchto příkladech jsou specifikovány vůči mapovacímu schématu obsaženému v SampleSchema1.xml. Pro informace o tomto ukázkovém schématu viz Ukázka anotovaného XSD schématu pro příklady XPath (SQLXML 4.0).

Examples

A. Získejte podřízené prvky kontextového uzlu

Následující dotaz XPath vybírá všechny <podprvky Kontaktů> kontextového uzlu:

/child::Contact  

V dotazu child je osa a Contact je test uzlu (PRAVDA, pokud Contact je <uzel prvku> , protože <prvek> je primární typ uzlu přiřazený child k ose).

Osa child je výchozí. Dotaz tedy lze zapsat jako:

/Contact  
Otestování dotazu XPath proti mapovacímu schématu
  1. Zkopírujte ukázkový kód schématu a vložte ho do textového souboru. Uložte soubor jako SampleSchema1.xml.

  2. Vytvořte následující šablonu (XPathAxesSampleA.xml) a uložite ji do adresáře, kde byl SampleSchema1.xml uložen.

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

    Adresářová cesta určená pro mapovací schéma (SampleSchema1.xml) je relativní k adresáři, ve kterém je šablona uložena. Absolutní cestu lze také specifikovat, například:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) k provedení šablony.

    Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.

Zde je množina částečných výsledků provedení šablony:

<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. Získejte vnoučata kontextového uzlu

Následující dotaz XPath vybírá všechny potomky <prvků Order> z potomků Customer elementů <> kontextového uzlu:

/child::Customer/child::Order  

V dotazu child je osa a Customer a Order jsou testy uzlů (tyto testy uzlů jsou PRAVDIVÉ, pokud jsou<> Customer a Order prvky uzlů, protože uzel <elementu> je primárním uzlem pro podosu). Pro každý uzel shodující <se se zákazníkem> se do výsledku přičtou uzly <odpovídající objednávkám> . V množině výsledků se vrací pouze <Order> .

Výchozí je podřízená osa. Dotaz tedy lze specifikovat jako:

/Customer/Order  
Otestování dotazu XPath proti mapovacímu schématu
  1. Zkopírujte ukázkový kód schématu a vložte ho do textového souboru. Uložte soubor jako SampleSchema1.xml.

  2. Vytvořte následující šablonu (XPathAxesSampleB.xml) a uložite ji do adresáře, kde:

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

    Adresářová cesta určená pro mapovací schéma (SampleSchema1.xml) je relativní k adresáři, ve kterém je šablona uložena. Absolutní cestu lze také specifikovat, například:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) k provedení šablony.

    Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.

Zde je množina částečných výsledků provedení šablony:

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

Pokud je dotaz XPath zadán jako Customer/Order/OrderDetail, z každého uzlu odpovídajícího <zákazníkovi> , dotaz přejde k jeho <prvkům Objednávky> . A pro každý uzel odpovídající <Orderu> dotaz přidá OrderDetail> uzlů< do výsledku. V množině výsledků se vrací pouze< OrderDetail>.

C. Používat.. pro určení nadřazovské osy

Následující dotaz získá všechny <prvky Objednávky> s nadřazeným <prvkem Customer> s hodnotou atributu CustomerID 1. Dotaz používá dětskou osu v predikátu k nalezení rodiče prvku <Order> .

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

Výchozí osa je podřízená . Dotaz tedy lze specifikovat jako:

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

Dotaz XPath je ekvivalentní:

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

Poznámka:

Dotaz /Order[../@CustomerID="1"] XPath vrátí chybu, protože neexistuje žádný rodič Order<>. Ačkoli mohou být prvky v mapovacím schématu, které obsahují <Order>, XPath nezačínal u žádného z nich; proto <je Order> považován za nejvyšší typ prvku v dokumentu.

Otestování dotazu XPath proti mapovacímu schématu
  1. Zkopírujte ukázkový kód schématu a vložte ho do textového souboru. Uložte soubor jako SampleSchema1.xml.

  2. Vytvořte následující šablonu (XPathAxesSampleC.xml) a uložite ji do adresáře, kde:

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

    Adresářová cesta určená pro mapovací schéma (SampleSchema1.xml) je relativní k adresáři, ve kterém je šablona uložena. Absolutní cestu lze také specifikovat, například:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) k provedení šablony.

    Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.

Zde je množina částečných výsledků provedení šablony:

<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. Specifikujte atributovou osu

Následující dotaz XPath vybírá všechny <podprvky CustomerID> kontextového uzlu s hodnotou atributu CustomerID 1:

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

V predikátu je osa a CustomerID je test uzlu (pokud CustomerID je atribut, test uzlu je PRAVDIVÝ, protože uzel <atributu> je primárním uzlem pro osuattribute). attributeattribute::CustomerID

Lze zadat zkratku na attribute osu (@), a protože child je výchozí osou, lze ji z dotazu vynechat:

/Customer[@CustomerID="1"]  
Otestování dotazu XPath proti mapovacímu schématu
  1. Zkopírujte ukázkový kód schématu a vložte ho do textového souboru. Uložte soubor jako SampleSchema1.xml.

  2. Vytvořte následující šablonu (XPathAxesSampleD.xml) a uložite ji do adresáře, kde se SampleSchema1.xml ukládá.

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

    Adresářová cesta určená pro mapovací schéma (SampleSchema1.xml) je relativní k adresáři, ve kterém je šablona uložena. Absolutní cestu lze také specifikovat, například:

    mapping-schema="C:\MyDir\SampleSchema1.xml"  
    
  3. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) k provedení šablony.

    Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.

Zde je množina částečných výsledků provedení šablony:

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