SIGN UP MEMBER LOGIN:    
ARTICLE

Introduction to LINQ to XML

Posted by srisakthi Articles | LINQ with C# August 20, 2010
LINQ to XML is in-memory representation of XML using LINQ. This is a simple tutorial on LINQ to XML.
Reader Level:

This is a simple tutorial on LINQ to XML.

In this article I'm going to share about 
  1. How to add new node to Xml.
  2. To get all attribute values.
  3. To add attribute.
LINQ to XML provides an in memory xml programming Interface. It allows writing query expressions over XML, also uses very simple model for constructing XML documents.

The goal of LINQ to XML API is to provide an object oriented approach for XML construction and management, avoiding or solving many common issues related to Xml manipulation.

You can create XML elements directly.

For e.g., XElement name = new XElement ("name");

The main difference between XPath and LINQ to XML is

XPath is used to navigate through elements and attributes of XML.

XPath can only return collections of nodes from the XML tree, whereas LINQ can execute query, project an object graph or XML tree.

XPath cannot parse the XPath expression at compile time and XPath results are not strongly typed, whereas LINQ to XML query are strongly typed (means, C# knows that these syntax are well formed).

My XML file (books.xml) contains the following:

<?xml version="1.0" encoding="iso-8859-1"?>
<bookstore>
  <book category="C#">
    <title name="Complete Reference 3.0" pub="Mc Graw Hill">
      <author>Herbert Schildt</author>
      <year>2009</year>
      <price>400.00</price>
    </title>
  </book>
  <book category="ASP.NET">
    <title name="Beginning ASP.NET 3.5" pub="Wrox">
      <author>Imar Spaanjaars</author>
      <year>2008</year>
      <price>450.00</price>
    </title>
  </book>
  <book category="C#">
    <title name="Head First C#" pub="O'Reilly">
      <author>Andrew Stellman</author>
      <author>Jennifer Greene</author>
      <year>2008</year>
      <price>350.00</price>
    </title>
  </book>
  <book category="C#">
    <title name="Professional C# 2008" pub="Wrox">
      <author>Christian Nagel</author>
      <year>2008</year>
      <price>500.00</price>
    </title>
  </book>
  <book category="ASP.NET">
    <title name="Pro ASP.NET 3.5" pub="Apress">
      <author>Matthew MacDonald</author>
      <year>2007</year>
      <price>450.00</price>
    </title>
  </book>
</bookstore>

XDocument doc = XDocument.Load(Server.MapPath("books.xml"));

The above line is used to load XML file to the XDocument.

1. To add new node

doc.Element("bookstore").Add(new XElement("book",
                             new XAttribute("category", "C#"),
                                   new XElement("title",
                                   new XAttribute("name", "C# Basics"),
                                     new XElement("author", "Sakthi"),
                                     new XElement("year", "2010"),
                                     new XElement("price", "250.00"))));

The above code will add new node called book with attribute category C# at the end.

2. To get all attribute values of Title i.e., name and pub

IEnumerable attribute = (IEnumerable)doc.XPathEvaluate("bookstore/book/title/@*");
foreach (XAttribute xattr in attribute)
{
    Response.Write(xattr.Name + " = " + xattr.Value + "</br>");
}

IEnumerable - Returns an enumerator that iterates through a collection.

XPathEvaluate - Evaluates a given XPath expression.i.e., it will locate the attributes in the given XPath expression.

I used foreach to loop through the values returned by the XPath and displays attribute name and its value.

3. To add attribute to a particular element.

I tried two ways, One with query and other with XElement.

First let's see, using query

var query2 = from getNode in doc.Descendants("book").Descendants("title")
                          where getNode.Attribute("name").Value == "C# Basics"
                          select getNode;
foreach (XElement el in query2)
{
      el.SetAttributeValue("pub", "shree");
}

This query is similar to Sql query. Here select should be placed at the last. Where condition is used to check whether the title has the attribute value C# Basics. Descendants is used to returns the collection of descendant element for the book and title. Using the SetAttributeValue, set attribute  name as pub and value as shree.

The other way is to use XElement

XElement elem = doc.Descendants("book").Descendants("title").Where(c => c.Attribute("name").Value == "C# Basics").FirstOrDefault();
if (elem != null)
{
    elem.SetAttributeValue("pub", "shree");
}

This line of code is very simple to understand it selects the first node that matches the criteria and adds the attribute name as pub and value as shree using SetAttributeValue.

Finally save XML using the following line

doc.Save(Server.MapPath("books.xml"));

Hope this article helps you.

Login to add your contents and source code to this article
share this article :
post comment
 

This is good code. Thanks

Posted by rossmason Feb 16, 2011

Thanks for sharing.

Posted by Mahesh Chand Aug 21, 2010
Nevron Gauge for SharePoint
Become a Sponsor
PREMIUM SPONSORS
  • Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
    The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
6 Months Free & No Setup Fees ASP.NET Hosting!
Become a Sponsor