Angeben eines Knotentests unter dem Speicherortpfad (SQLXML 4.0)
Ein Knotentest gibt den vom Speicherortschritt 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>.
Hinweis |
|---|
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>. Deshalb ist der Knotentest TRUE, wenn der <Customer>-Knoten ein <element>-Knoten ist. Wenn der Kontextknoten über keine untergeordneten <Customer>-Elemente verfügt, wird ein leerer Satz 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. Der Hauptknotentyp der attribute-Achse ist <attribute>. Deshalb ist der Knotentest TRUE, wenn der CustomerID ein <attribute>-Knoten ist. Wenn der Kontextknoten über keine CustomerID verfügt, wird ein leerer Satz Knoten zurückgegeben.
Hinweis |
|---|
Bei dieser Implementierung von XPath tritt ein Fehler auf, wenn ein Speicherortschritt auf einen <element>-Typ oder einen <attribute>-Typ verweist, der nicht im Schema deklariert wurde. 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.
Hinweis