
Introduction
In this article one will see how we can read and XML file it our ASP.NET application,
this trick is use full for making custom configuration files for your application
or just reading data stored in an xml file.
Overview
This code uses the XmlTextReader
object to read the disk file
into the XmlDocument
object. the XmlTextReader
object
has very similar functionality to the StreamReader
and BinaryReader
objects, except that it is specifically designed to read XML file. The XmlTextReader
object also has other XML-specific features. For example the WhitespaceHandling
property setting in the code tells it not to create nodes for extra whitespace
in the XML file.
The code uses the DocumentElement
property of the XmlDocument
object to find the node at the root of the tree representation of the XML document.
After that, we just recursively call the procedure that adds information about
the node to the ListBox
control.
The code also deals with attributes. Attribues
nodes are not included in the
ChildNodes
collection of a node in the XmlDocument
object. Instead, you can use the Attributes
property of the XmlNode
object to get a collection of attribute nodes only. The code uses an XmlNamedNodeMap
object to hold this collection; this object can hold an arbitrary collection
of XmlNode
objects of any type.
Code listing
private void btnLoad_Click(object sender, System.EventArgs e)
{
XmlTextReader reader = new XmlTextReader(
Server.MapPath("mycompany.xml"));
reader.WhitespaceHandling = WhitespaceHandling.None;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(reader);
reader.Close();
lbNodes.Items.Add("XML Document");
XmlNode xnod = xmlDoc.DocumentElement;
AddWithChildren(xnod,1);
}
private void AddWithChildren(XmlNode xnod, Int32 intLevel)
{
XmlNode xnodWorking;
String strIndent = new string(' ',2 * intLevel);
string strValue = (string) xnod.Value;
if(strValue != null)
{
strValue = " : " + strValue;
}
lbNodes.Items.Add(strIndent + xnod.Name + strValue);
if (xnod.NodeType == XmlNodeType.Element)
{
XmlNamedNodeMap mapAttributes = xnod.Attributes;
foreach(XmlNode xnodAttribute in mapAttributes)
{
lbNodes.Items.Add(strIndent + " " + xnodAttribute.Name +
" : " + xnodAttribute.Value);
}
if(xnod.HasChildNodes)
{
xnodWorking = xnod.FirstChild;
while (xnodWorking != null)
{
AddWithChildren(xnodWorking, intLevel +1);
xnodWorking = xnodWorking.NextSibling;
}
}
}
}
}