如何用C#正确解析这个XML?

时间:2012-07-17 20:34:34

标签: c# xml

我有以下XML代码:

<Presets>
  <Preset ID="0" Name="aaaa">
    <IncludedChampions>
      <ID>5</ID>
      <ID>6</ID>
      <ID>7</ID>
    </IncludedChampions>
  </Preset>
  <Preset ID="1" Name="some">
    <IncludedChampions>
      <ID>4</ID>
      <ID>5</ID>
      <ID>6</ID>
    </IncludedChampions>
   </Preset>
</Presets>

我试图用它来解析它:

XmlReader reader = XmlReader.Create("./config.xml");
while (reader.Read())
{
   while (reader.ReadToFollowing("Preset"))
   {
       presetList.Add(new Preset());
       presetList[presetList.Count - 1].name = reader.GetAttribute(1);
       Console.WriteLine("Preset list ID " + Convert.ToString(presetList.Count - 1));

      while (reader.ReadToFollowing("ID"))
      {
         Console.WriteLine("Champion ID " + reader.ReadElementContentAsString());
      }
   }
}

但是在输出中,我只看到'Preset list ID 0',然后是所有ID。其他Preset ID在哪里?谢谢!

1 个答案:

答案 0 :(得分:4)

XmlReader.ReadToFollowing记录如下:

  

读取,直到找到具有指定限定名称的元素。

现在,从第一个预设中的ID 7开始,名称为“ID”的“下一个元素”是什么?这是ID 4,当然......它不仅搜索兄弟姐妹

正如Nick建议的那样,使用LINQ to XML会使这更简单......或者甚至只是XmlDocument模型,如果你真的被困在.NET 2上。

以下是相关的LINQ to XML代码:

XDocument doc = XDocument.Load("config.xml");
foreach (var element in doc.Descendants("Preset"))
{
    var preset = new Preset { name = element.Attribute("Name").Value };
    presetList.Add(preset);
    Console.WriteLine("Preset list ID " + preset);
    foreach (var id in element.Descendants("ID"))
    {
        Console.WriteLine(id.Value);
    }
}