Reader Level:
Articles

Reading XML File Through LINQ: A Few Tips

By Dhananjay Kumar on Jun 20, 2011
In this articlet I will discuss how to read XML files using LINQ. We will see some tips as well.
  • 0
  • 0
  • 56205


In this articlet I will discuss how to read XML files using LINQ. We will see some tips as well.

Let us say we have a XML file as below; the file is stored on the D drive. The XML file contains information about books.

Data.Xml

<?xml version="1.0" encoding="utf-8" ?>
<catalog>
  <books>
<book id="bk101"
  <author id="1">Gambardella, Matthew</author>
  <title>XML Developer's Guide</title>
  <genre>Computer</genre>
  <price>44.95</price>
  <publish_date>2000-10-01</publish_date>
   <description> An in-depth look at creating applications with XML.</description>
</book>
<book id="bk102">
  <author id="2">Ralls, Kim</author>
  <title>Midnight Rain</title>
  <genre>Fantasy</genre>
  <price>5.95</price>
  <publish_date>2000-12-16</publish_date>
  <description> A former architect battles corporate zombies,an evil sorceress, and her own childhood to become
queen of the world.</description>
</book>
<book id="bk103">
  <author id="3">Corets, Eva</author>
  <title>Maeve Ascendant</title>
  <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2000-11-17</publish_date>
    <description>After the collapse of a nanotechnology society in England, the young survivors lay the foundation for
a new society. </description>
  </book>
 
<book id="bk104">
    <author id="4">Corets, Eva</author>
    <title>Oberon's Legacy</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2001-03-10</publish_date>
    <description>In post-apocalypse England, the mysterious agent known only as Oberon helps to create a new life for
 the inhabitants of London. Sequel to Maeve Ascendant.</description>
 
  </book>
 
<book id="bk105">
    <author id="5">Corets, Eva</author>
    <title>The Sundered Grail</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2001-09-10</publish_date>
    <description>The two daughters of Maeve, half-sisters, battle one another for control of England. Sequel to
Oberon's Legacy.</description>
 
  </book>
  </books>
</catalog>


Fetching all the Books

To fetch all the books, we just need to parse the XML file. Find the descendants book and fetch it into an anonymous class.

ReadingXML1.gif

Fetching a Particular Book

If you want to fetch a particular book, we need to apply a where condition while parsing the XML file.

ReadingXML1.2.gif


Fetching the Attribute Value of a particular Book

Imagine you need to fetch the author Id of the book with Id bk102. To do that you need to select as below:

ReadingXML2.gif

Fetching all the Authors Name only

To fetch the entire author name, we need to execute the following query.

ReadingXML3.gif

For your reference thefull source code is as below:

Program.cs

using System;
using System.Linq;
using System.Xml.Linq;

namespace ConsoleApplication23
{
    class Program
    {
        static void Main(string[] args)
        {
            XDocument document = XDocument.Load("D:\\Data.xml");
            #region Fetch All the Books 
            var books = from r in document.Descendants("book")
                        select new
                            {
                                Author = r.Element("author").Value,
                                Title = r.Element("title").Value,
                                Genere = r.Element("genre").Value,
                                Price = r.Element("price").Value,
                                PublishDate = r.Element("publish_date").Value,
                                Description = r.Element("description").Value,
 
                            };
 
            foreach (var r in books)
            {
                Console.WriteLine(r.PublishDate + r.Title + r.Author);
            }
 
            Console.ReadKey(true);
            #endregion 
 
            #region Fetching a particular  Book            
            var selectedBook = from r in document.Descendants("book").Where
                                   (r=>(string)r.Attribute("id")=="bk102")
                        select new
                        {
                            Author = r.Element("author").Value,
                            Title = r.Element("title").Value,
                            Genere = r.Element("genre").Value,
                            Price = r.Element("price").Value,
                            PublishDate = r.Element("publish_date").Value,
                            Description = r.Element("description").Value,
 
                        };
 
            foreach (var r in selectedBook)
            {
                Console.WriteLine(r.PublishDate + r.Title + r.Author);
            }
            Console.ReadKey(true);
            #endregion 
 
          
 
            #region Fetching a particular  Book
 
          
            var selectedBookAttribute = (from r in document.Descendants("book").Where
                                        (r => (string)r.Attribute("id") == "bk102")
                                        select r.Element("author").Attribute("id").Value).FirstOrDefault();
            
            Console.WriteLine(selectedBookAttribute);         
                        
            Console.ReadKey(true);                                  
 
            #endregion
 
 
            #region Fetching all Authors 
 
           
            var allauthors = from r in document.Descendants("book")
                                         select r.Element("author").Value; 
            foreach(var r in allauthors)
            {
                Console.WriteLine(r.ToString());
            }
           
 
            Console.ReadKey(true);
 
            #endregion
 
 
     
 
        }
    }
}


Output

ReadingXML4.gif

I hope this article was useful. Thanks for reading.

Dhananjay Kumar

Dhananjay kumar is an independent trainer, a consultant and a programmer from India. He has mentored more than 1000 professionals and known for his unique way of teaching. He has been part of the multiple projects for bi... Read more

Personal Blog: http://debugmode.net/
COMMENT USING

Trending up