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 
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 
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. 
Drag a table by choosing Server Explorer option. I am dragging WCF table here. 
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: 
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, 
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
|
|
|