A ver si esto te puede ayudar, que es bastante simple y se recorre bastante rápido. Tal vez no es lo más dinámico, o correcto, pero funciona.
Yo tengo para una estructura de este tipo :
<root>
<CLIENTES>
<Cliente>
<Codigo>
<Nombre>
</Cliente>
<Cliente>
<Codigo>
<Nombre>
</Cliente>
</CLIENTES>
<DIRECCIONES>
<Direccion>
<Codigo>
</Direccion>
<DIRECCIONES>
</root>
El código para recorrerlo es el siguiente:if (documentoXML != null){XmlNodeList xmlObject = documentoXML.GetElementsByTagName("root"); if (xmlObject != null){ if (xmlObject.Item(0).HasChildNodes()){ foreach (XmlElement xmlTabla in xmlObject.Item(0).ChildNodes){objXMLTabla = xmlTabla.ChildNodes;if (objXMLTabla != null){ if (xmlTabla.GetAttribute("Nombre") == "CLIENTES") { foreach (XmlElement xmlCliente in xmlTabla.ChildNodes) { if (xmlCliente.NodeName == "Cliente"){ Cliente clie = new Cliente(); if (xmlCliente.GetElementsByTagName("Codigo").Item(0) != null){ clie.Codigo = Convert.ToString(xmlCliente.GetElementsByTagName("Codigo").Item(0).InnerText); } if (xmlCliente.GetElementsByTagName("Nombre").Item(0) != null){ clie.Nombre = Convert.ToString(xmlCliente.GetElementsByTagName("Nom").Item(0).InnerText); } } } else if (xmlTabla.GetAttribute("Nombre") == "DIRECCIONES") {...}
Espero te ayude!