In a previous article Integrate XML data Within your ASP page using XslCompiledTransform class: Part I, I provided a technique of how to integrate XML content within a given ASP page using the new XslCompiledTransform class which plays the role of the processor which apply the XSL transformation on a given XML file. In this tutorial I will expose a second technique to achieve the same goal but using XLINQ API instead.

Always we consider the famous NorthAfrica.xml file which is represented as follow:

<?xml version='1.0'?>

<Countries>

<Country>

<Name>Lybia</Name>

<Area>1,759,541 km2</Area>

<Population>6,173,579</Population>

<Capital>Triapolis</Capital>

<Currency>Dinar</Currency>

<TLD>ly</TLD>

</Country>

<Country>

<Name>Tunisia</Name>

<Area>163,610 km2</Area>

<Population>10,327,800</Population>

<Capital>Tunis</Capital>

<Currency>Dinar</Currency>

<TLD>tn</TLD>

</Country>

<Country>

<Name>Algeria</Name>

<Area>2,381,741 km2</Area>

<Population>33,769,669</Population>

<Capital>Alger</Capital>

<Currency>Dinar</Currency>

<TLD>dz</TLD>

</Country>

<Country >

<Name>Morroco</Name>

<Area>446,550 km2</Area>

<Population>31,352,000</Population>

<Capital>Ribat</Capital>

<Currency>Dirham</Currency>

<TLD>ma</TLD>

</Country>

<Country>

<Name>Mauritania</Name>

<Area>1,030,700 km2</Area>

<Population>3,069,000</Population>

<Capital>Nouag Chot</Capital>

<Currency>Ouguiya</Currency>

<TLD>mr</TLD>

</Country>

</Countries>

Let's save it within our D:\ hard drive partition. Then we add those three namespaces

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

Then we apply this code:

public partial class _Default : System.Web.UI.Page

{

//Define an XElement

XElement input;

protected void Page_Load(object sender, EventArgs e)

{

//Read the xml file using a StreamReader

StreamReader oReader = new StreamReader(@"D:\NorthAfrica.xml");

//Load the contents of the xml file in a string

string Content = oReader.ReadToEnd();

//Close the reader

oReader.Close();

//The method parse will map the content of the string

input = XElement.Parse(Content);

/* We try to get the parent node as it contains the child nodes

* whiches integrate data

*/

XElement xe = input.Element("Country");

//Print out the title

Response.Write("<h1>North African countries</h1>");

//Print out the data about the Area

Response.Write("<h2>Area of each counrty</h2>");

Response.Write("<table>");

foreach (XElement el in input.Elements())

{

Response.Write("<tr>");

Response.Write("<th align='left'>" +

el.Element("Name").Value + "</th>");

Response.Write("<td align='left'>" + el.Element("Area").Value + "</td>");

Response.Write("</tr>");

}

Response.Write("</table>");

//Print out the data about the Population

Response.Write("<h2>Population of each counrty</h2>");

Response.Write("<table>");

foreach (XElement el in input.Elements())

{

Response.Write("<tr>");

Response.Write("<th align='left'>" +

el.Element("Name").Value + "</th>");

Response.Write("<td align='left'>" +

el.Element("Population").Value + "</td>");

Response.Write("</tr>");

}

Response.Write("</table>");

//Print out the data about the Capital

Response.Write("<h2>Capital of each counrty</h2>");

Response.Write("<table>");

foreach (XElement el in input.Elements())

{

Response.Write("<tr>");

Response.Write("<th align='left'>" +

el.Element("Name").Value + "</th>");

Response.Write("<td align='left'>" +

el.Element("Capital").Value + "</td>");

Response.Write("</tr>");

}

Response.Write("</table>");

//Print out the data about the Currency

Response.Write("<h2>Currency of each counrty</h2>");

Response.Write("<table>");

foreach (XElement el in input.Elements())

{

Response.Write("<tr>");

Response.Write("<th align='left'>" +

el.Element("Name").Value + "</th>");

Response.Write("<td align='left'>" +

el.Element("Currency").Value + "</td>");

Response.Write("</tr>");

}

Response.Write("</table>");

//Print out the data about the TLD

Response.Write("<h2>TLD of each counrty</h2>");

Response.Write("<table>");

foreach (XElement el in input.Elements())

{

Response.Write("<tr>");

Response.Write("<th align='left'>" +

el.Element("Name").Value + "</th>");

Response.Write("<td align='left'>" +

el.Element("TLD").Value + "</td>");

Response.Write("</tr>");

}

Response.Write("</table>");

}

}

And then the result will be:

1.gif

Figure 1

That's it

Good Dotneting!!!