2010-05-09 6 views
13

Je suis en train de trouver un nœud par nom dans un XmlDocument avec le code suivant:Rechercher nœuds par nom dans 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; 
} 

J'appelle la fonction avec:

FindNode(xmlDocument.ChildNodes, "somestring"); 

Pour certains raison pour laquelle il retourne toujours nul et je ne sais pas trop pourquoi. Est-ce que quelqu'un peut m'aider avec ça?

+0

Non seulement XmlDocument.GetElementsByTagName (nodeName)? –

Répondre

7

Modifier cette ligne:

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

à:

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

ÉDITÉE: le code est plus correct maintenant (testé);)

+0

Merci, mec. Sorte de stupide que j'ai raté quelque chose d'aussi simple. – RajenK

+1

Parfois, plus vous vérifiez le code, moins vous réussir à fixer ...: D – digEmAll

18

Pourquoi ne pas utiliser

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

?

+1

sauvé ma peau - à la vôtre! – Jeff

+0

Ouais, c'était super utile, merci. –

+0

Vous pouvez obtenir une exception si un espace de noms est déjà défini dans yr xml: Namespace Manager ou XsltContext nécessaire. Cette requête a un préfixe, une variable ou une fonction définie par l'utilisateur. –

Questions connexes