Freigeben über


Angeben eines Knotentests unter dem Speicherortpfad (SQLXML 4.0)

Ein Knotentest gibt den vom Positionsschritt ausgewählten Knotentyp an. Jede Achse (child, parent, attribute oder self) hat einen Hauptknotentyp. Für die attribute-Achse ist der Hauptknotentyp <attribute>. Für die Achsen parent, child, und self ist der Hauptknotentyp <element>.

HinweisHinweis

Der Platzhalterknotentest * (z. B. child::*) wird nicht unterstützt.

Knotentest: Beispiel 1

Der Speicherortpfad child::Customer wählt untergeordnete <Customer>-Elemente des Kontextknotens aus.

In diesem Beispiel ist child die Achse, und Customer ist der Knotentest. Der Hauptknotentyp für die child-Achse ist <element>. Daher hat der Knotentest den Wert TRUE, wenn der <Customer>-Knoten ein <element>-Knoten ist. Wenn der Kontextknoten keine untergeordneten <Customer>-Elemente enthält, wird ein leerer Satz von Knoten zurückgegeben.

Knotentest: Beispiel 2

Der Speicherortpfad attribute::CustomerID wählt das CustomerID-Attribut des Kontextknotens aus.

Im Beispiel ist attribute die Achse, und CustomerID ist der Knotentest. Für die attribute-Achse ist der Hauptknotentyp <attribute>. Daher hat der Knotentest den Wert TRUE, wenn CustomerID ein <attribute>-Knoten ist. Wenn der Kontextknoten über keine CustomerID verfügt, wird ein leerer Satz Knoten zurückgegeben.

HinweisHinweis

In dieser Implementierung von XPath wird ein Fehler generiert, wenn ein Positionsschritt auf einen <element>-Typ oder einen <attribute>-Typ verweist, der nicht im Schema deklariert ist. Dies unterscheidet sich von der Implementierung von XPath in MSXML, bei der ein leerer Knotensatz zurückgegeben wird.

Abgekürzte Syntax für die Achsen

Es wird die folgende abgekürzte Syntax für den Speicherortpfad unterstützt:

  • attribute:: kann als @ abgekürzt werden.

    Der Speicherortpfad Customer[@CustomerID="ALFKI"] entspricht child::Customer[attribute::CustomerID="ALFKI"].

  • child:: kann von einem Speicherortschritt ausgelassen werden.

    Daher ist child die Standardachse. Der Speicherortpfad Customer/Order entspricht child::Customer/child::Order.

  • self::node() kann zu einem Punkt (.) abgekürzt werden, und parent::node() kann zu zwei Punkten (..) abgekürzt werden.