an der DTD der Suche:XPath-Context-Knoten während Achse Navigation
<!ELEMENT root (a|b)+>
<!ELEMENT a (a|b)*>
<!ELEMENT b (a|b)*>
Und die folgenden einfachen XML: (I die Elemente der Einfachheit halber getaggt)
<root>
<b1>
<b2></b2>
<a1></a1>
</b1>
<b3></b3>
</root>
Wenn ich die folgenden Abfragen:
a) /descendant-or-self::node()/b[1]
b) /descendant-or-self::b[1]
Sowohl in a) und b), bevor ich [1] anwende, bekomme ich alle b's im XML-Baum.
Aber wenn ich nach dem ersten b frage, bekomme ich in a) {b1, b2} und in b) bekomme ich nur {b1}.
Meine Frage ist, was ist die Logik über Kontextknoten in diesem Szenario? Mit anderen Worten, warum ist der Unterschied zwischen "/ abcendant-or-self :: node()/b" (was ich weiß, äquivalent zu "//") und "/ abcendant-or-self/b"?
Im Allgemeinen gibt/descendant-or-self :: b alle b zurück, wobei der Kontextknoten das "self" ist, von dem aus ich zu "demcendant-or-self" navigiere? Wenn ja, so "/ abcendant-or-self :: b [2]" Ich bekomme das zweitnächste Tag für root in der xml-Datei, b2 in meinem Beispiel? – sel