RajenK
RajenK

Reputation: 1423

Search for nodes by name in XmlDocument

I'm trying to find a node by name in an XmlDocument with the following code:

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;
}

I call the function with:

FindNode(xmlDocument.ChildNodes, "somestring");

For some reason it always returns null and I'm not really sure why. Can someone help me out with this?

Upvotes: 15

Views: 40510

Answers (2)

Tom W
Tom W

Reputation: 5413

Why can't you use

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

?

Upvotes: 23

digEmAll
digEmAll

Reputation: 57220

Change this line:

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

to:

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

EDITED: the code is more correct now (tested) ;)

Upvotes: 7

Related Questions