2009-09-25 10 views
6

Jeśli wywołać selectNodes na XmlElement i przechodzi zapytanie XPath takie jak to:selectNodes nie obejmuje zasięgiem elementu

węzły XmlNodeList = xmlElement.SelectNodes ("// OtherNode");

Lista węzłów będzie dla wszystkich OtherNode elementy w dokumencie nie tylko te z XMLELEMENT.

wydaje mi przypomnieć, że jest to zgodne z projektem, a dla dobrego powodu, ale nie mogę sobie przypomnieć, co to był dobry powód, ani w jaki sposób dostać się wokół niego.

Odpowiedz

10

Wystarczy dodać dot do początku xpath. dot wybiera bieżący węzeł:

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

proste wyjaśnienie „dlaczego” jest to, że jak ze ścieżkami plików - '/ foo/bar' jest ścieżka bezwzględna, gdzie wiodącym'/'oznacza„zaczynać od korzenia "; 'foo/bar' to względna ścieżka do pliku, która może być również zapisana'./foo/bar'. Podobnie jest z XPath, i tam obowiązuje zarówno '/' jak i '//' - więc wiodący '/' zawsze oznacza "start z węzła głównego w drzewie, do którego należy bieżący węzeł kontekstu". –

+2

Dlaczego nie po prostu "OtherNode"? – Joren

+3

Bo on chce rozważyć wszystkich potomków, a nie tylko najbliższe dzieci? –

Powiązane problemy