Reputation: 251
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
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
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