I was out at a customer site a few weeks ago and needed to whip up a quick program to extract a large number of values from an XML document. To me, the obvious way to accomplish this task was to write a quick application to read the XML, parse the values, and write them to a separate document. Linq to XML made this cumbersome task very easy, and I was reminded of just how amazing Linq to XML really is.
Linq to XML is one of the best things to happen to XML in recent history, but I think there are still a lot of developers out there who are either not familiar with Linq or are just comfortable working with XML using the same techniques that they always have. I haven’t done an extensive amount of XML processing in my career, but I haven’t exactly been a stranger to it, either. In my opinion Linq to XML makes working with XML downright trivial. If you haven’t looked into it, I definitely recommend that you do!
For the purposes of demonstration, consider an XML file “data.xml” with the following contents:
<Library>
<Books>
<Book>
<Title>A Study in Scarlet</Title>
<Author>Sir Arthur Conan Doyle</Author>
</Book>
<Book>
<Title>A Thief in the Night</Title>
<Author>E. W. Hornung</Author>
</Book>
</Books>
</Library>
Using Linq to XML, you can write code to parse the contents of the file into easy-to-use objects.
var xml = XDocument.Load(@"data.xml");
var data = from n in xml.Descendants("Book")
select new
{
Author = n.Element("Author").Value,
Title = n.Element("Title").Value
};
foreach (var d in data)
Console.WriteLine("{0},{1}", d.Title, d.Author);
Looking for a specific value in the XML? Just modify your Linq query!
var xml = XDocument.Load(@"data.xml");
var data = from n in xml.Descendants("Book")
where n.Element("Author").Value == "E. W. Hornung"
select new
{
Author = n.Element("Author").Value,
Title = n.Element("Title").Value
};
So cool!