2009-09-25 12 views
6

Se chiamo SelectNodes su un XmlElement, e passo query XPath come questo:SelectNodes non limitate alla Element

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

L'elenco dei nodi sarà per tutti gli elementi OtherNode nel documento, non solo quelli di xmlElement.

Mi sembra di ricordare che questo è di progettazione, e per una buona ragione, ma non riesco a ricordare quale sia stata la buona ragione, né come aggirarla.

risposta

10

Basta aggiungere un dot all'inizio del xpath. Il dot seleziona il nodo corrente:

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

Una semplice spiegazione del "perché" è che è come con i percorsi dei file - '/ foo/bar' è un percorso assoluto, dove il leader'/'significa "iniziare dalla radice "; 'foo/bar' è un percorso di file relativo, che può anche essere scritto'./foo/bar'. Allo stesso modo con XPath, e lì si applica a '/' e '//' - così il comando '/' significa sempre "inizia dal nodo radice nell'albero a cui appartiene il nodo di contesto corrente". –

+2

Perché non solo "OtherNode"? – Joren

+3

Perché vuole considerare tutti i discendenti, e non solo i bambini immediati? –