by kirupa |
18 January 2007The
previous page
provided you with a brief overview of what XML is and how to
read an XML file. This page will translate what you learned
and discuss how to get your code to read an XML file!
The way you read an XML file is similar to using a
magnifying glass and looking at each element in the XML file
individually. At each element, you determine whether that
element has anything valuable to look at, and if it does,
you extract the valuable info and move on to the
next node.
If you convert the above basic
overview into something useful, you will
get the following block of code that you can use to read a
XML file:
- XmlTextReader reader = new XmlTextReader("C:\\links.xml");
- while (reader.Read())
- {
- XmlNodeType nodeType = reader.NodeType;
- switch (nodeType)
- {
- case XmlNodeType.Element:
- Console.WriteLine("Element name is {0}", reader.Name);
- if (reader.HasAttributes)
- {
- for (int i = 0; i < reader.AttributeCount; i++)
- {
- reader.MoveToAttribute(i);
- Console.WriteLine("Attribute is {0} with Value {1}: ", reader.Name, reader.Value);
- }
- }
- break;
- case XmlNodeType.Text:
- Console.WriteLine("Value is: " + reader.Value);
- break;
- }
- }
-
The above code loads an XML file called
links.xml, uses a while loop to look at each node, checks
whether the node is an element or text, and depending on
whether the node is an element or text, does something such
as printing something to our console. The interesting tidbits are in the details, so let's
look at the code line-by-line.
Let me go through each line of the code in greater detail:
- XmlTextReader
reader
= new
XmlTextReader("C:\\links.xml"));
The XmlTextReader class is what you
primarily use to read data from XML files. In the above line
of code, I create a reader object of type XmlTextReader, and
I pass the path of my XML file to the constructor.
Notice that I am using two \\ slashes instead of a single \
slash to designate the path. The reason is that a single \
in a string can be interpreted as an escape character. By
using two slashes, you avoid having to use the less elegant
" and / combination to prevent a Unrecognized Escape
Sequence error. The final thing to
note about this line is that if you
plan on deploying your application to other users with an
embedded links.xml file, be sure to check out my tutorial on how to use
resources to internalize links.xml to your situation:
- XmlTextReader
reader
= new
XmlTextReader(Assembly.GetExecutingAssembly
().GetManifestResourceStream("XMLTest.links.xml"));
Let's move on and look at our while loop: - while (reader.Read())
- {
- XmlNodeType nodeType
= reader.NodeType;
- if (nodeType
== XmlNodeType.Element)
- {
- switch(reader.Name)
{
- case "title":
- Console.WriteLine("TITLE: "
+ reader.ReadString());
- break;
- case "link":
- Console.WriteLine("LINK: "
+ reader.ReadString());
- break;
- case "parent":
- reader.MoveToAttribute(0);
- Console.WriteLine("PARENT: "
+ reader.Value);
- break;
- }
- }
- }
The reader object
stores our XML file, and what we need to do is go
through each node in our XML file and figure out what it
represents. We achieve the "go through each node" goal
by using a while loop and using our reader object's
Read
method. The reader.Read() statement is a boolean value that returns a true as long as there is data
to be read. Once the we reach the end of our XML file,
reader.Read() will return a false and the loop terminates.
In the next
page, we'll go further in our code and learn what
exactly happens when our loop takes us the to the next node.
Onwards to the
next page!
|