2010-05-09 14 views
13

Estoy tratando de encontrar un nodo por su nombre en un XmlDocument con el siguiente código:Búsqueda de nodos por su nombre en 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; 
} 

que llame a la función con:

FindNode(xmlDocument.ChildNodes, "somestring"); 

Para algunos razón por la que siempre devuelve nulo y no estoy muy seguro de por qué. ¿Alguien me puede ayudar con esto?

+0

No solo XmlDocument.GetElementsByTagName (nodeName)? –

Respuesta

7

cambiar esta línea:

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

a:

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

Editado: el código es más correcto ahora (probado);)

+0

Gracias, amigo. Es un poco estúpido que me haya perdido algo tan simple. – RajenK

+1

veces, cuanto más se comprueba el código, menos a tener éxito en la fijación que ...: D – digEmAll

18

Por qué no puedes usar

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

?

+1

Me salvó la piel, ¡salud! – Jeff

+0

Sí, esto fue súper útil, gracias. –

+0

Puede obtener una excepción si ya hay un espacio de nombres definido en el año xml: Namespace Manager o XsltContext necesarios. Esta consulta tiene un prefijo, variable o función definida por el usuario. –

Cuestiones relacionadas