2010-05-09 12 views
13

Sto cercando di trovare un nodo in base al nome in un XmlDocument con il seguente codice:Ricerca per i nodi per nome in XmlDocument

private XmlNode FindNode(XmlNodeList list, string nodeName) 
{ 
    if (list.Count > 0) 
    { 
     foreach (XmlNode node in list) 
     { 
      if (node.Name.Equals(nodeName)) return node; 
      if (node.HasChildNodes) FindNode(node.ChildNodes, nodeName); 
     } 
    } 
    return null; 
} 

ho chiamare la funzione con:

FindNode(xmlDocument.ChildNodes, "somestring"); 

Per alcuni motivo restituisce sempre null e non sono davvero sicuro del perché. Qualcuno può aiutarmi con questo?

+0

Non solo XmlDocument.GetElementsByTagName (nodeName)? –

risposta

7

Modifica questa linea:

if (node.HasChildNodes) FindNode(node.ChildNodes, nodeName); 

a:

if (node.HasChildNodes) 
{ 
    XmlNode nodeFound = FindNode(node.ChildNodes, nodeName); 
    if (nodeFound != null) 
     return nodeFound; 
} 

Modificato: il codice è più corretto ora (testato);)

+0

Grazie, amico. Un po 'stupido che mi sia sfuggito qualcosa di così semplice. – RajenK

+1

A volte più di controllare il codice, meno si riescono a risolverlo ...: D – digEmAll

18

Perché non è possibile utilizzare

Node.SelectSingleNode(".//" + nodeName) 

?

+1

Salvato la mia pelle - evviva! – Jeff

+0

Sì, questo è stato super utile, grazie. –

+0

È possibile ottenere un'eccezione se esiste già uno spazio dei nomi definito in yr xml: Namespace Manager o XsltContext necessari. Questa query ha un prefisso, una variabile o una funzione definita dall'utente. –

Problemi correlati