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. Customer
ist 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. Customer
ist 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 Order
entspricht.
Weitere Informationen
Einführung in XSD-Schemas mit Anmerkungen (SQLXML 4.0)
Clientseitige XML-Formatierung (SQLXML 4.0)