Вы также можете использовать LINQ to XML:
XElement el = XElement.Load("MyXML.xml");
int maxAttr = el.DescendantNodesAndSelf().OfType<XElement>().Max(x => x.Attributes().Count());
Приведенный выше код пересекает все узлы xml (он работает и с вложенными узлами) и получает максимальное количество атрибутов.
Для .net 2.0:
XmlDocument doc = new XmlDocument();
doc.Load("MyXML.xml");
int max = 0;
foreach (XmlNode xmlNode in doc.SelectNodes("//*"))
if (max < node.Attributes.Count)
max = node.Attributes.Count;
Это в основном то же самое, что и ваше решение;основное отличие состоит в том, что он учитывает все узлы на каждом уровне вложенности (используя навигацию XPath).