Creating XML Tree from Scratch through LINQ

No.of Views1005
Bookmarked0 times
Downloads 
Votes0
By  Dhananjay Kumar   On  16 Feb 2010 00:02:56
Tag : LINQ , How to
Creating XML Tree from Scratch through LINQ
emailbookmarkadd commentsprint

Images in this article missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at info@codegain.com

 

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.

Download Souce Code-CS

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.


{codecitation class="brush: csharp; gutter: true;" width="650px"}

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);

{/codecitation}

Output

Image Loading....

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

{codecitation class="brush: csharp; gutter: true;" width="650px"}

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; }
}
}

{/codecitation}


Creating a static method to construct list of authors

{codecitation class="brush: csharp; gutter: true;" width="650px"}


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;
}

{/codecitation}

Constructing XML from List

{codecitation class="brush: csharp; gutter: true;" width="650px"}

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



{/codecitation}

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


Putting all together

{codecitation class="brush: csharp; gutter: true;" width="650px"}

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; }
}

}
}

{/codecitation}

Output

Image Loading...


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.

Image Loading...

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

Image Loading...



Fetching all the records

{codecitation class="brush: csharp; gutter: true;" width="650px"}

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

{/codecitation}

Constructing XML from list

{codecitation class="brush: csharp; gutter: true;" width="650px"}

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


{/codecitation}


Putting all together

{codecitation class="brush: csharp; gutter: true;" width="650px"}

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);
}

{/codecitation}

Output:

Image Loading...

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.


{codecitation class="brush: csharp; gutter: true;" width="650px"}

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

{/codecitation}

a.xml will contain something like below,

Image Loading...

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.


About the Author


Dhananjay Kumar
Description :I done my engineering from Anand Engineering college Agra in 2007. I am MCTS WCF, MCTS MOSS Development, I am MCTS Web Development . I am native of Jamshedpur. Currently Please feel free to contact me regarding any clarification of my article at Dhananjay.25july@gmail.com

Occupation : Software Engineer
Company : UST Global.
Location : India
Follow me at twitter : http://twitter.com/dhananjay25


 
Sign Up to vote for this article
 
About Author
 
Dhananjay Kumar
Occupation-Software Engineer
Company-Infosys Technolgies,Pune
Member Type-Gold
Location-India
Joined date-20 Jul 2009
Home Page-http://dhananjaykumar.net/
Blog Page-http://dhananjaykumar.net/
Dhananjay Kumar is Microsoft MVP on connected system. He blogs at http://dhananjaykumar.net/ . You can follow him http://twitter.com/debugmode_/ and reach him at dhananjay.25july@gmail.com
 
 
Other popularSectionarticles
Comments
There is no comments for this articles.
Leave a Reply
Title:
Display Name:
Email:
(not display in page for the security purphase)
Website:
Message:
Please refresh your screen using Ctrl+F5
If you can't read this number refresh your screen
Please input the anti-spam code that you can read in the image.
^ Scroll to Top