Teilen über


Angeben von Auswahlprädikaten im Speicherortpfad (SQLXML 4.0)

Gilt für: SQL Server Azure SQL-Datenbank

Ein Prädikat filtert eine Knotengruppe in Bezug auf eine Achse (ähnlich einer WHERE-Klausel in einer SELECT-Anweisung). Das Prädikat wird zwischen Klammern angegeben. Für jeden Knoten in der zu filternden Knotengruppe wird der Prädikatausdruck mit dem entsprechenden Knoten als Kontextknoten ausgewertet. Die Anzahl der Knoten in der Knotengruppe dient dabei als Kontextgröße. Ergibt die Auswertung des Prädikatausdrucks für den betreffenden Knoten TRUE, wird dieser Knoten in die resultierende Knotengruppe aufgenommen.

XPath ermöglicht auch die positionsbasierte Filterung. Ein Prädikatausdruck, der eine Zahl ergibt, wählt diesen Ordinalzahlenknoten aus. Beispielsweise gibt der Speicherortpfad Customer[3] den dritten Kunden zurück. Solche numerische Prädikate werden nicht unterstützt. Nur Prädikatausdrücke, die ein boolesches Ergebnis zurückgeben, werden unterstützt.

Hinweis

Informationen zu den Einschränkungen dieser XPath-Implementierung von XPath und den Unterschieden zwischen dieser und der W3C-Spezifikation finden Sie unter Einführung in die Verwendung von XPath-Abfragen (SQLXML 4.0).

Auswahl-Prädikat: Beispiel 1

Der folgende XPath-Ausdruck (Speicherortpfad) wählt aus dem aktuellen Kontextknoten alle untergeordneten Elemente des <Customer-Elements> mit dem Wert "CustomerID" mit dem Wert "ALFKI" aus:

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

In dieser XPath-Abfrage sind child und attribute die Achsennamen. Customerist der Knotentest (TRUE, wenn Customer es sich um einen <Elementknoten> handelt, da< das Element> der Prinzipalknotentyp für die child Achse ist). attribute::CustomerID="ALFKI" ist das Prädikat. Im Prädikat attribute ist die Achse und CustomerID der Knotentest (TRUE, wenn CustomerID ein Attribut des Kontextknotens ist, da< das Attribut> der Hauptknotentyp der Attributachse ist).

In abgekürzter Syntax kann die XPath-Abfrage auch wie folgt angegeben werden:

/Customer[@CustomerID="ALFKI"]  

Auswahl-Prädikat: Beispiel 2

Der folgende XPath-Ausdruck (Speicherortpfad) wählt aus dem aktuellen Kontextknoten alle Enkelkinder order> aus, die <das SalesOrderID-Attribut mit dem Wert 1 aufweisen:

/child::Customer/child::Order[attribute::SalesOrderID="1"]  

In diesem XPath-Ausdruck sind child und attribute die Achsennamen. Customer, Order und SalesOrderID sind die Knotentests. attribute::OrderID="1" ist das Prädikat.

In abgekürzter Syntax kann die XPath-Abfrage auch wie folgt angegeben werden:

/Customer/Order[@SalesOrderID="1"]  

Auswahl-Prädikat: Beispiel 3

Der folgende XPath-Ausdruck (Speicherortpfad) wählt aus dem aktuellen Kontextknoten alle untergeordneten Customer-Elemente> mit mindestens einem< ContactName-Untergeordneten> Element aus:<

child::Customer[child::ContactName]  

In diesem Beispiel wird davon ausgegangen, dass "<ContactName>" ein untergeordnetes Element des <Customer-Elements> im XML-Dokument ist, das als elementorientierte Zuordnung in einem kommentierten XSD-Schema bezeichnet wird.

In diesem XPath-Ausdruck ist child der Achsenname. Customerist der Knotentest (TRUE, wenn Customer es sich um einen <Elementknoten> handelt, da< das Element> der Hauptknotentyp für child die Achse ist). child::ContactName ist das Prädikat. Im Prädikat child ist die Achse und ContactName der Knotentest (TRUE, wenn ContactName es sich um einen <Elementknoten> handelt).

Dieser Ausdruck gibt nur die untergeordneten Elemente des <> Customer-Elements des Kontextknotens mit< untergeordneten Elementen des ContactName-Elements> zurück.

In abgekürzter Syntax kann die XPath-Abfrage auch wie folgt angegeben werden:

Customer[ContactName]  

Auswahl-Prädikat: Beispiel 4

Der folgende XPath-Ausdruck wählt untergeordnete Elemente des Customer-Elements des Kontextknotens <aus, der nicht <über untergeordnete Elemente des ContactName-Elements> verfügt:>

child::Customer[not(child::ContactName)]  

In diesem Beispiel wird davon ausgegangen, dass ContactName> ein untergeordnetes Element des <Customer-Elements> im XML-Dokument ist und das Feld "ContactName" in der Datenbank nicht erforderlich ist.<

In diesem Beispiel ist child die Achse. Customer ist der Knotentest (TRUE, wenn Customer es sich um einen <Elementknoten> handelt). not(child::ContactName) ist das Prädikat. Im Prädikat child ist die Achse und ContactName der Knotentest (TRUE, wenn ContactName es sich um einen <Elementknoten> handelt).

In abgekürzter Syntax kann die XPath-Abfrage auch wie folgt angegeben werden:

Customer[not(ContactName)]  

Auswahl-Prädikat: Beispiel 5

Der folgende XPath-Ausdruck wählt aus dem aktuellen Kontextknoten alle untergeordneten Elemente des <Kunden> mit dem CustomerID-Attribut aus:

child::Customer[attribute::CustomerID]  

In diesem Beispiel child handelt es sich um die Achse und Customer den Knotentest (TRUE, wenn Customer es sich um einen <Elementknoten> handelt). attribute::CustomerID ist das Prädikat. Im Prädikat attribute ist die Achse und CustomerID das Prädikat (TRUE, wenn CustomerID es sich um einen <Attributknoten> handelt).

In abgekürzter Syntax kann die XPath-Abfrage auch wie folgt angegeben werden:

Customer[@CustomerID]  

Auswahlprädikat: Beispiel 6

Microsoft SQLXML 4.0 enthält Unterstützung für XPath-Abfragen, die ein produktübergreifendes Produkt im Prädikat enthalten, wie im folgenden Beispiel gezeigt:

Customer[Order/@OrderDate=Order/@ShipDate]  

Durch diese Abfrage werden alle Kunden mit einer Order ausgewählt, bei der OrderDate dem ShipDate für eine beliebige Orderentspricht.

Weitere Informationen

Einführung in XSD-Schemas mit Anmerkungen (SQLXML 4.0)
Clientseitige XML-Formatierung (SQLXML 4.0)