stihl
stihl

Reputation: 251

Reading large XML file

I have many xml files with the following structure

<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>

I need data from A, and interval2 children acel,decel,lef,right for every raw node in main, I dont know much about XML. I've gotten to where i get A for every raw, but no further.

Upvotes: 1

Views: 783

Answers (2)

Steve Wellens
Steve Wellens

Reputation: 20620

The simplest way is to use XmlDocument. However, this reads the entire file into memory so would not be appropriate for immensely large files.

Upvotes: 0

Jon Skeet
Jon Skeet

Reputation: 1500495

The simplest way in C# - if you're using .NET 3.5 or higher - is to use 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);
    }
}

Of course that's just one way of querying it - it's hard to give a more concrete answer without more information about what you're trying to do.

Upvotes: 1

Related Questions