2009-09-25 6 views
6

Wenn ich Select auf einem XmlElement nennen, und XPath-Abfrage, wie dies passieren:Select nicht auf das Element scoped

XmlNodeList Knoten = xmlElement.SelectNodes ("// OtherNode");

Die Knotenliste gilt für alle OtherNode-Elemente im Dokument, nicht nur für die Elemente aus xmlElement.

Ich erinnere mich, dass dies von Entwurf ist, und aus einem guten Grund, aber ich kann mich nicht erinnern, was dieser gute Grund war, noch, wie man es umgeht.

Antwort

10

Fügen Sie einfach einen dot an den Anfang der xpath. Die dot wählt den aktuellen Knoten:

XmlNodeList nodes = xmlElement.SelectNodes(".//OtherNode"); 
+1

Eine einfache Erklärung von „Warum“ ist, dass es wie mit Dateipfaden - '/ foo/bar' ist ein absoluter Pfad, wo die führenden'/'bedeutet„von der Wurzel starten "; 'foo/bar' ist ein relativer Dateipfad, der auch'./foo/bar' geschrieben werden kann. Ähnlich verhält es sich mit XPath, und dort gilt es sowohl für '/' als auch für '//' - also führt '/' immer "Start vom Wurzelknoten in der Baumstruktur, zu der der aktuelle Kontextknoten gehört". –

+2

Warum nicht einfach "OtherNode"? – Joren

+3

Weil er alle Nachkommen und nicht nur die unmittelbaren Kinder betrachten will? –

Verwandte Themen