Namenstests
Ein Namenstest ist die gebräuchlichste Form eines Knotentests, da Sie damit die Namen der auszuwählenden Knoten explizit angeben können. Durch die Angabe des Namens für einen Knoten wird der entsprechende Knoten jedoch nicht automatisch ausgewählt, da eine Dokumentstruktur über unterschiedliche Knotentypen mit demselben Namen verfügen kann. Die Auswahl des entsprechenden Knotens erfolgt, indem mit einem Namenstest nur die Knoten ausgewählt werden, deren Name mit dem angegebenen Namen übereinstimmt und deren Knotentyp mit dem Basisknotentyp der angegebenen Achse übereinstimmt.
In der folgenden Tabelle sind die Basisknotentypen für die verschiedenen Achsen aufgelistet.
Achse |
Basisknotentyp |
---|---|
Jede Achse, mit Ausnahme einer attribute:: -Achse oder der namespace::-Achse (d. h. eine Achse, die Elemente enthalten kann) |
Element |
Attribut |
Attribut |
namespace |
namespace |
Der in einem Namenstest angegebene Name kann einem von drei Typen entsprechen: einem Sternchen (*), QName oder dem Ausdruck NCName:*. Die folgende Tabelle enthält Beispiele dafür, wie mit den einzelnen Typen von Namen in Verbindung mit der angegebenen Achse nach einer bestimmten Knotengruppe gesucht werden kann.
Name |
Rückgabe |
Beispiel |
---|---|---|
* (Sternchen) |
True für jeden Knoten des Basisknotentyps. |
ancestor::* wählt alle Vorgänger des Kontextknotens aus. attribute::* wählt alle Attribute des Kontextknotens aus. namespace::* wählt alle Namespaces des Kontextknotens aus. |
QName |
True für jeden Knoten des Basisknotentyps, dessen erweiterter Name dem vom QName angegebenen, erweiterten Namen entspricht. |
child::para wählt alle Knoten der <para>-Elementknoten aus, die untergeordnete Knoten des Kontextknotens darstellen. Wenn der Kontextknoten keine untergeordneten <para>-Knoten aufweist, wird eine leere Knotengruppe ausgewählt. |
NCName:* |
True für jeden Knoten des Basistyps, dessen erweiterter Name über den Namespace-URI verfügt, auf den der NCName erweitert wird. Dabei spielt der lokale Name keine Rolle. |
child::ns:* wählt alle untergeordneten Elementknoten aus, die in dem Namespace sind, der über das ns-Präfix verfügt. |
Hinweise
Wenn der Knotentest ein QName ist, muss der QName zunächst von XPath anhand der Kontext-Namespacedeklarationen in der XML-Datei erweitert werden. Dieser Erweiterungsvorgang entspricht dem Erweiterungsvorgang für Elementnamen in Anfangs- und Endtags. Hierbei wird jedoch der mit xmlns deklarierte Standardnamespace nicht verwendet. Wenn der QName über kein Präfix verfügt, sucht XPath nach den Knoten, deren lokale Namen mit dem angegebenen QName übereinstimmen und deren Namespace-URI NULL ist. Ein QName verursacht einen Fehler, wenn das Präfix des QName keiner Kontext-Namespacedeklaration in der Datei entspricht.
Wenn der Knotentest NCName:* ist, erweitert XPath den NCName auf die gleiche Art und Weise, wie das Präfix eines QName erweitert wird. Ebenso verursacht NCName:* einen Fehler, wenn der NCName-Teil keinem der Präfixe entspricht, die in den Kontext-Namespacedeklarationen in der Datei enthalten sind.