Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#正确解析此XML?_C#_Xml - Fatal编程技术网

如何使用C#正确解析此XML?

如何使用C#正确解析此XML?,c#,xml,C#,Xml,我有以下XML代码: <Presets> <Preset ID="0" Name="aaaa"> <IncludedChampions> <ID>5</ID> <ID>6</ID> <ID>7</ID> </IncludedChampions> </Preset> <Preset ID="1" N

我有以下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>
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);
    }
}
但在输出中,我只看到“预设列表ID 0”,然后看到所有ID。另一个预设ID去了哪里?谢谢

记录如下:

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

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

正如Nick所建议的,使用LINQ到XML将使这变得简单得多。。。如果您真的被困在.NET2上,甚至可以只使用
XmlDocument
模型

以下是相关的LINQ到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>
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);
    }
}
记录如下:

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

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

正如Nick所建议的,使用LINQ到XML将使这变得简单得多。。。如果您真的被困在.NET2上,甚至可以只使用
XmlDocument
模型

以下是相关的LINQ到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>
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);
    }
}

您是否绑定到
XmlReader
XElement
是选项吗?您是否绑定到
XmlReader
XElement
是一种选择吗?哦,我认为XmlWriter/Reader是一种选择。从现在起,我将尝试使用XDocument!谢谢@argoneus:
XmlReader
如果您真的想要流式处理文档,那么它是很好的——如果它们基本上是巨大的。如果您愿意将整个内容加载到内存中,那么LINQ到XML非常好。最后一件事,使用XmlWriter还是LINQ到XML更好?@argoneus:再说一遍,除非您需要使用
XmlWriter
以流式方式编写一个大文件,否则我每次都会使用LINQ到XML。我不太明白如何将代码放入xdoc中。。e、 g.新的XElement(“预设”,foreach(预设列表中的变量项){}给我一个错误哦,我认为XmlWriter/Reader是一个不错的选择。从现在开始,我将尝试使用XDocument!谢谢!@argoneus:
XmlReader
如果你真的想流式处理文档的话是很好的——如果它们很大的话。如果你乐意将整个内容加载到内存中,LINQ到XML是很棒的。最后一件事,使用XmlWrit是否更好er还是LINQ到XML?@argoneus:再说一次,除非你需要使用
XmlWriter
以流式方式编写一个大文件,否则我每次都会使用LINQ到XML。我不太明白如何将代码放入我的xdoc中。例如,新的XElement(“预设”,foreach(预设列表中的var项){}会给我错误