C# XmlDocument 如何获取指向根元素的指针并遍历子元素

C# XmlDocument how to get pointer to root element and iterate over children

在 XML 文档中:

Foo.xml

<products>
    <product>
        <id>1</id>
          <name>Foo</name>
    </product>
    <product>
        <id>2</id>
        <name>Bar</name>
    </product>
</products>

如何获取这个根元素,遍历他的子元素并获取它们的属性?

Bar.cs

XmlDocument doc = new XmlDocument();
doc.Load(path + "/foo.xml");

XmlNode mainNode = doc.DocumentElement.SelectSingleNode("products");
XmlNode root = mainNode.FirstChild; //null

foreach (XmlNode node in mainNode)
{
    int id = Convert.ToInt32(node["id"].InnerText);
    string name = node["name"].InnerText);
    list.Items.Add(id);
    list.Items.Add(name);
}

此代码暗示 mainNode 为空。这样做的最佳做法是什么?

DocumentElement是XML的最外层元素,即<products>元素。您不能在其下方 select 另一个 <products> 元素。

你能做什么:

XmlNode mainNode = doc.SelectSingleNode("products");

XmlNode mainNode = doc.DocumentElement;

XmlNode mainNode = doc.DocumentElement.SelectSingleNode("//products");   

第二个可能是最快的,因为它不需要解析和处理查询。最后一个有点矫枉过正,出于代码简洁的原因(KISS 原则)应该避免。