1

我有以下 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());
      }
   }
}

但在输出中,我只看到“预设列表 ID 0”,然后是所有 ID。另一个预设 ID 去哪儿了?谢谢!

4

1 回答 1

4

XmlReader.ReadToFollowing记录如下:

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

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

正如尼克建议的那样,使用 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);
    }
}
于 2012-07-17T20:37:24.610 回答