我有以下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在哪里?谢谢!
答案 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);
}
}