.NET Tutorials, Forums, Interview Questions And Answers
Welcome :Guest
 
Sign In
Register
 
Win Surprise Gifts!!!
Congratulations!!!


Top 5 Contributors of the Month
david stephan

Home >> Articles >> LINQ >> Post New Resource Bookmark and Share   

 Subscribe to Articles

Creating XML Tree using LINQ

Posted By:Dhananjay Kumar       Posted Date: December 16, 2009    Points: 25    Category: LINQ    URL: http://www.dotnetspark.com  
 

Creating XML Tree using LINQ

Objective:

This article is going to explain, How to create XML Tree using LINQ? This will be explaining Functional Construction way of creating XML tree. There are three samples given in this article. One for basic XML tree construction, one to construct from array of objects and last to construct XML tree from content of a DB table.

Functional Construction

LINQ to XML provides a powerful way to construct XML tree, and this way is called Functional Construction. Functional Construction is the ability to create XML tree in one line of code. Various classes to be used from LINQ to XML programming interface to enable functional construction. XElement is most important among them.

XElement class

  1. This class represents XML element.
  2. This class is inside the namespace System.Xml.Linq
  3. This class is used to construct XML.
  4. This class takes various types of arguments for content.
  5. This is extended from XContainer class and XContainer class is extended from XNode class.
  6. Some method of this class could be used from the XAML.

Content of XElement class
  1. A string, which is added as text content. This is the recommended pattern to add a string as the value of an element.
  2. An XText, which can have either a string or CData value, added as child content.
  3. A XElement, which is added as a child element.
  4. A XAttribute, which is added as an attribute.
  5. An XProcessingInstruction or XComment, which is added as child content.
  6. An IEnumerable, which is enumerated, and these rules are applied recursively.
  7. Anything else, ToString() is called and the result is added as text content.
  8. Null, which is ignored.

Sample 1 : Creating simple XML Tree with hard coded value

In below sample, we are creating a simple XML. Elements are as Data1, Data2 and so on. Data1 element is having a property called name with the value Dj. We are using XElement and XAttribute classes from LINQ to XML API to achieve this task.

XElement xmltree = new XElement("Root",
  new
XElement("Data1",new XAttribute("name","Dj"),1),
  new XElement("Data2",
  new XElement("Data2A","2a")),
   new XElement("Data3", "3"),
   new XElement ("Data4","4")
  );
 Console.WriteLine(xmltree);
 Console.ReadKey(true);
);

Output

1.gif

Sample 2: Constructing XML Tree from Array (List) of class.

In this sample
  1. I will create a class called Author
  2. I will create a list of Author.
  3. I will construct XML from that List of class.

Creating a Author class

using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;  namespace LinqtoXMLSample1
{
  public  class Author
  {
  public string Name { get; set; }
  public int NumberofArticles { get; set; }
  }
}

Creating a static method to construct list of authors

static
List<Author> CreateAuthorList()

  List<Author> list = new List<Author>()
  {
  new
Author(){Name="Dhananjay Kumar",NumberofArticles= 60},
  new Author (){Name =" Rekha Singh ", NumberofArticles =5},
  new Author () {Name = " Deepti maya patra",NumberofArticles =55},
  new Author (){Name=" Mahesh Chand",NumberofArticles = 700},
  new Author (){Name =" Mike Gold",NumberofArticles = 300},
  new Author(){Name ="Praveen Masood",NumberofArticles = 200},
  new Author (){Name ="Shiv Prasad Koirala",NumberofArticles=100},
  new Author (){Name =" Mamata M ",NumberofArticles =50},
  new Author (){Name=" Puren Mehara",NumberofArticles =50}
  };
  return list;
}

Constructing XML from List

XElement
xmlfromlist = new XElement("Authors",
    from a in list
   select
    new XElement("Author",
    new XElement("Name", a.Name),
    new XElement("NumberOfArticles", a.NumberofArticles)));

In above code , I am simple enumerating through the list and adding Element in XML.

Putting all together

using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Collections;
using
System.Xml.Linq;  namespace LinqtoXMLSample1
{
  class Program
  {
  static void Main(string[] args)
  {
  List<Author> list = CreateAuthorList();
  XElement xmlfromlist = new XElement("Authors",
  from a in list
  select
  new XElement("Author",
  new XElement("Name", a.Name),
  new XElement("NumberOfArticles", a.NumberofArticles)));
  Console.WriteLine(xmlfromlist);
  Console.ReadKey(true);
  }
  static List<Author> CreateAuthorList()
  {
  List<Author> list = new List<Author>()
  {
  new Author(){Name="Dhananjay Kumar",NumberofArticles= 60},
  new Author (){Name =" Rekha Singh ", NumberofArticles =5},
  new Author () {Name = " Deepti maya patra",NumberofArticles =55},
  new Author (){Name=" Mahesh Chand",NumberofArticles = 700},
  new Author (){Name =" Mike Gold",NumberofArticles = 300},
  new Author(){Name ="Praveen Masood",NumberofArticles = 200},
  new Author (){Name ="Shiv Prasad Koirala",NumberofArticles=100},
  new Author (){Name =" Mamata M ",NumberofArticles =50},
  new Author (){Name=" Puren Mehara",NumberofArticles =50}
   };
  return list;
  }   class Author
  {
  public string Name { get; set; }
  public int NumberofArticles { get; set; }
  }
  }
}

Output 2.gif

Sample 3: Constructing XML Tree from a DB Table.

In this sample, I will create XML tree from content of a table. I do have a table in my Data Base.

Creating LINQ to SQL Class

Right click and add a LINQ to SQL class. 3.gif

Drag a table by choosing Server Explorer option. I am dragging WCF table here.

4.gif

Fetching all the records

var
res = from r in context.WCFs select r;

Constructing XML from list

XElement
xmlfromdb = new XElement("Employee",
  from a in res
  select
  new XElement("EMP",
  new XElement("EmpId", a.EmpId),
  new XElement("Name", a.Name)));

Putting all together

using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Collections;
using
System.Xml.Linq;  namespace LinqtoXMLSample1
{
  class Program
  {
  static void Main(string[] args)
  {
  DataClasses1DataContext context = new DataClasses1DataContext();
  var res = from r in context.WCFs select r;
  foreach (WCF r in res)
  {
  Console.WriteLine(r.Name);
  }   XElement xmlfromdb = new XElement("Employee",
  from a in res
  select
  new XElement("EMP",
  new XElement("EmpId", a.EmpId),
  new XElement("Name", a.Name)));
  Console.WriteLine(xmlfromdb);
  Console.ReadKey(true);
  }

Output:

5.gif

Saving XML Tree in a XML file

So far in all above sample, I am just displaying the XML tree on the console. What if? We want to save them on hard disk. To do that, just call Save () method on instance on XElement.

So to save the XML tree in a XML file in Sample 3, just we need to call Save method as below. XML Tree will get saved in a.xml at location E local drive.

xmlfromdb.Save(@"e:\\a.xml");
Console
.WriteLine("File Saved");

a.xml will contain something like below,

6.gif

Conclusion:

In this article, I have talked about various way of creating XML tree using LINQ. Please find the attached code for better understanding. Thanks for reading.

Happy Coding


 Subscribe to Articles

     

Further Readings:

Responses

No response found. Be the first to respond this post

Post Comment

You must Sign In To post reply
Find More Articles on C#, ASP.Net, Vb.Net, SQL Server and more Here

Hall of Fame    Twitter   Terms of Service    Privacy Policy    Contact Us    Archives   Tell A Friend