Freigeben über


Angeben von Achsen in XPath-Abfragen (SQLXML 4.0)

In den folgenden Beispielen wird gezeigt, wie Achsen in XPath-Abfragen angegeben werden.

Die XPath-Abfragen in diesen Beispielen werden für das in SampleSchema1.xml enthaltene Zuordnungsschema angegeben. Weitere Informationen zu diesem Beispielschema finden Sie unter Beispiel-XSD-Schema mit Anmerkungen für XPath-Beispiele (SQLXML 4.0).

Beispiele

A. Abrufen von untergeordneten Elementen des Kontextknotens

Die folgende XPath-Abfrage wählt alle untergeordneten <Contact>-Elemente des Kontextknotens aus:

/child::Contact

In der Abfrage ist child die Achse und Contact der Knotentest (TRUE, wenn Contact ein <Element>-Knoten ist, da <Element> der primäre Knotentyp für die child-Achse ist).

Die child-Achse ist die Standardachse. Daher kann die Abfrage wie folgt geschrieben werden:

/Contact

So testen Sie die XPath-Abfrage mit dem Zuordnungsschema

  1. Kopieren Sie den Beispielschemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen SampleSchema1.xml.

  2. Erstellen Sie die folgende Vorlage (XPathAxesSampleA.xml), und speichern Sie sie in dem Verzeichnis, in dem SampleSchema1.xml gespeichert wurde.

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

    Der für das Zuordnungsschema (SampleSchema1.xml) angegebene Verzeichnispfad bezieht sich auf das Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\MyDir\SampleSchema1.xml"
    
  3. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML 4.0-Abfragen.

Im Folgenden finden Sie einen Auszug aus dem Resultset der Vorlagenausführung:

<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. Abrufen von untergeordneten Elementen zweiter Ordnung des Kontextknotens

Die folgende XPath-Abfrage wählt alle untergeordneten <Order>-Elemente des untergeordneten <Customer>-Elements des Kontextknotens auf:

/child::Customer/child::Order

In der Abfrage ist child die Achse und Customer und Order sind die Knotentests. (Diese Knotentests sind TRUE, wenn Customer und Order<Element>-Knoten sind, da der <Element>-Knoten der primäre Knoten für die child-Achse ist). Bei jedem Knoten, der mit <Customer> übereinstimmt, werden die Knoten, die mit <Orders> übereinstimmen, zum Ergebnis hinzugefügt. Nur <Order> wird im Resultset zurückgegeben.

Die child-Achse ist die Standardachse. Daher kann die Abfrage wie folgt angegeben werden:

/Customer/Order

So testen Sie die XPath-Abfrage mit dem Zuordnungsschema

  1. Kopieren Sie den Beispielschemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen SampleSchema1.xml.

  2. Erstellen Sie die folgende Vorlage (XPathAxesSampleB.xml), und speichern Sie sie im folgenden Verzeichnis:

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

    Der für das Zuordnungsschema (SampleSchema1.xml) angegebene Verzeichnispfad bezieht sich auf das Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\MyDir\SampleSchema1.xml"
    
  3. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML 4.0-Abfragen.

Im Folgenden finden Sie einen Auszug aus dem Resultset der Vorlagenausführung:

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

Wenn die XPath-Abfrage als Customer/Order/OrderDetail angegeben wird, navigiert die Abfrage von den Knoten, die mit <Customer> übereinstimmen, zu den untergeordneten <Order>-Elementen. Und für jeden Knoten, der mit <Order> übereinstimmt, fügt die Abfrage die <OrderDetail>-Knoten zum Ergebnis hinzu. Nur <OrderDetail> wird im Resultset zurückgegeben.

C. Verwenden von .. zum Angeben der übergeordneten Achse

Mit der folgenden Abfrage werden alle <Order>-Elemente mit einem übergeordneten <Customer>-Element abgerufen, deren CustomerID-Attributwert 1 beträgt. Die Abfrage verwendet die child-Achse im Prädikat, um das übergeordnete Element des <Order>-Elements zu suchen.

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

Die child-Achse ist die Standardachse. Daher kann die Abfrage wie folgt angegeben werden:

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

Die XPath-Abfrage hat die folgende Entsprechung:

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

Der XPath-Abfrage /Order[../@CustomerID="1"] gibt einen Fehler zurück, da es kein übergeordnetes <Order>-Element gibt. Möglicherweise sind im Zuordnungsschema Elemente vorhanden, die <Order> enthalten, aber XPath beginnt bei keinem dieser Elemente. Daher wird <Order> als Element der obersten Ebene im Dokument betrachtet.

So testen Sie die XPath-Abfrage mit dem Zuordnungsschema

  1. Kopieren Sie den Beispielschemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen SampleSchema1.xml.

  2. Erstellen Sie die folgende Vorlage (XPathAxesSampleC.xml), und speichern Sie sie im folgenden Verzeichnis:

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

    Der für das Zuordnungsschema (SampleSchema1.xml) angegebene Verzeichnispfad bezieht sich auf das Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\MyDir\SampleSchema1.xml"
    
  3. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML 4.0-Abfragen.

Im Folgenden finden Sie einen Auszug aus dem Resultset der Vorlagenausführung:

<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. Angeben der Attributachse

Die folgende XPath-Abfrage wählt alle untergeordneten <Customer>-Elemente des Kontextknotens aus, deren CustomerID-Attributwert 1 beträgt.

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

Im Prädikat ist attribute::CustomerID, attribute die Achse und CustomerID der Knotentest. (Wenn CustomerID ein Attribut ist, ist der Knotentest TRUE, da der <Attribut>-Knoten der primäre Knoten für die attribute-Achse ist).

Es kann eine Verknüpfung mit der attribute-Achse (@) angegeben werden, und da child die Standardachse ist, muss sie in der Abfrage nicht angegeben werden:

/Customer[@CustomerID="1"]

So testen Sie die XPath-Abfrage mit dem Zuordnungsschema

  1. Kopieren Sie den Beispielschemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen SampleSchema1.xml.

  2. Erstellen Sie die folgende Vorlage (XPathAxesSampleD.xml), und speichern Sie sie in dem Verzeichnis, in dem SampleSchema1.xml gespeichert wird.

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

    Der für das Zuordnungschema (SampleSchema1.xml) angegebene Verzeichnispfad bezieht sich auf das Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\MyDir\SampleSchema1.xml"
    
  3. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML 4.0-Abfragen.

Im Folgenden finden Sie einen Auszug aus dem Resultset der Vorlagenausführung:

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