Freigeben über


Angeben von Auswahl-Prädikaten im Speicherortpfad (SQLXML 4.0)

Ein Prädikat filtert einen Knotensatz in Bezug auf eine Achse (ähnlich einer WHERE-Klausel in einer SELECT-Anweisung). Das Prädikat wird zwischen eckigen Klammern angegeben. Für jeden Knoten im Knotensatz, der gefiltert werden soll, wird der Prädikatausdruck mit diesem Knoten als Kontextknoten ausgewertet, wobei die Anzahl der Knoten im Knotensatz als Kontextgröße ausgewertet wird. Wenn der Prädikatausdruck für diesen Knoten als WAHR ausgewertet wird, wird der Knoten im resultierenden Knotensatz enthalten.

XPath ermöglicht auch positionsbasierte Filterung. Ein Prädikatausdruck, der auf eine Zahl ausgewertet wird, wählt diesen Ordinalknoten aus. Der Standortpfad gibt z. B Customer[3] . den dritten Kunden zurück. Solche numerischen Prädikate werden nicht unterstützt. Es werden nur Prädikatausdrücke unterstützt, die ein boolesches Ergebnis zurückgeben.

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

Bei dieser XPath-Abfrage child handelt es attribute sich um 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 attribute Achse ist).

Mit der abgekürzten 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 child und attribute sind die Achsennamen. Customer, Orderund SalesOrderID sind die Knotentests. attribute::OrderID="1" ist das Prädikat.

Mit der abgekürzten 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 child ist 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.

Mit der abgekürzten 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 child ist 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).

Mit der abgekürzten 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).

Mit der abgekürzten Syntax kann die XPath-Abfrage auch wie folgt angegeben werden:

Customer[@CustomerID]  

Auswahl-Prä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]  

Diese Abfrage wählt alle Kunden mit allen Order Kunden aus, für die der OrderDateShipDate Wert eines beliebigen OrderWerts entspricht.

Siehe auch

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