C# 解析层次xml

C# 解析层次xml,c#,xml,C#,Xml,我想知道如何解析此XML: <MenuItems> <MenuItem Id="2" Name="Country"> <MenuItem Id="2272" Name="Europe"> <MenuItem Id="888" Name="Austria"/> </MenuItem> <MenuItem Id="2572" Name="Asia"> <MenuItem Id="

我想知道如何解析此XML:

<MenuItems>
  <MenuItem Id="2" Name="Country">
    <MenuItem Id="2272" Name="Europe">
      <MenuItem Id="888" Name="Austria"/>
    </MenuItem>
    <MenuItem Id="2572" Name="Asia">
  <MenuItem Id="2572" Name="Japan"/>
    </MenuItem>
      </MenuItem>
      <MenuItem Id="3" Name="Car">
    <MenuItem Id="231" Name="Diesel">
      <MenuItem Id="387" Name="Toyota">
    <MenuItem Id="387" Name="Avensis"/>
      </MenuItem>
    </MenuItem>
  </MenuItem>
</MenuItems>
大概是这样的:

using System.Xml.Linq;
using System.Xml.XPath;

. . . 

void PrintMenu(XElement menuElement, string prefix)
{
  string newPrefix = prefix + "-";
  foreach (XElement subMenuElement in menuElement.XPathSelectElements("MenuItem")) {
    Console.WriteLine(prefix+(string)subMenuElement.Attribute("Name"));
    PrintMenu(subMenuElement, newPrefix);
  }
}

. . . 

XElement doc = XElement.Parse(DataXml); 
PrintMenu(doc, String.Empty);

这实际上是两个问题:

  • 这两者都是微不足道的,在其他地方也有充分的解释

    using System.Xml.Linq;
    using System.Xml.XPath;
    
    . . . 
    
    void PrintMenu(XElement menuElement, string prefix)
    {
      string newPrefix = prefix + "-";
      foreach (XElement subMenuElement in menuElement.XPathSelectElements("MenuItem")) {
        Console.WriteLine(prefix+(string)subMenuElement.Attribute("Name"));
        PrintMenu(subMenuElement, newPrefix);
      }
    }
    
    . . . 
    
    XElement doc = XElement.Parse(DataXml); 
    PrintMenu(doc, String.Empty);