读取大型XML文件

时间:2012-01-24 19:12:56

标签: c# xml file parsing nodes

我有许多具有以下结构的xml文件

<main.....>
 <raw...>
  <A>field 1</A>
  <B>field 2</B>
  ....
  <interval>
   <type>data</type>
   <type>data</type>
  </interval>
  <interval>
   <type>data</type>
   <type>data</type>
  </interval>
  <interval2>
   <acel>data i need</acel>
   <decel>data i need</decel>
   <left>data i need</left>
   <right>data i need</right>
   <range>tsw</range>
  </interval2>
  <interval2>
   <acel>data i need</acel>
   <decel>data i need</decel>
   <left>data i need</left>
   <right>data i need</right>
   <range>xyz</range>
  </interval2>
 </raw>
 ...
 </raw>
 <raw>
 ...
 </raw>
</main>

我需要来自A的数据,而且对于main中的每个原始节点,我需要对interval2子进行acel,decel,lef,对,我不太了解XML。我已经到了每个原始的A,但没有进一步。

2 个答案:

答案 0 :(得分:1)

C#中最简单的方法 - 如果你使用的是.NET 3.5或更高版本 - 是使用LINQ to XML:

XDocument doc = XDocument.Load("file.xml");
var query = doc.Descendants("raw")
               .Select(raw => new {
                           A = (string) raw.Element("A"),
                           Interval2 = raw.Element("interval2")
                                          .Elements("type2")
                                          .Select(type2 => (string) type2)
                                          .ToList()
                       });

foreach (var item in query)
{
    Console.WriteLine("A: {0}", item.A);
    Console.WriteLine("Interval2 values:");
    foreach (var x in item.Interval2)
    {
        Console.WriteLine("  {0}", x);
    }
}

当然,这只是查询它的一种方式 - 如果没有关于你要做什么的更多信息,很难给出更具体的答案。

答案 1 :(得分:0)

最简单的方法是使用XmlDocument。但是,这会将整个文件读入内存,因此不适用于非常大的文件。