How to read XML from a file by using Visual C#

 

View products that this article applies to.

This article was previously published under Q307548

On This Page

Expand all | Collapse all

SUMMARY

This article describes how to use the XmlTextReader class to read Extensible Mar…

This article describes how to use the XmlTextReader class to read Extensible Markup Language (XML) from a file. XmlTextReader provides direct parsing and tokenizing of XML and implements the XML 1.0 specification as well as the namespaces in the XML specification from the World Wide Web Consortium (W3C). This article provides fast, tokenized stream access to XML rather than using an object model such as the XML Document Object Model (DOM).

Back to the top

Requirements

The following list outlines the recommended hardware, software, network infrastructure, and service packs that you need:

  • Microsoft Visual Studio 2005 or Microsoft Visual Studio .NET

This article assumes that you are familiar with the following topics:

  • XML terminology
  • Creating and reading an XML file

Back to the top

How to read XML from a file

This example uses a file named Books.xml. You can create your own Books.xml file or use the sample file that is included with the .NET Software Development Kit (SDK) QuickStarts in the following folder:

\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\QuickStart\Howto\Samples\Xml\Transformxml\Cs

You must copy Books.xml to the \Bin\Debug folder, which is located under the folder in which you create this project. Books.xml is also available for download. See to the “References” section for the download location.

  1. Start Visual Studio 2005 or Visual Studio .NET.
  2. Create a new Visual C# Console Application. You proceed directly to the “Complete code listing” section or continue through these steps to build the application.
  3. Make sure that the project contains a reference to the System.Xml.dll assembly.
  4. Specify the using directive on the System.Xml namespace so that you are not required to qualify XmlTextReader declarations later in your code. You must use the using directive before any other declarations.

5. using System.Xml;

  1. Create an instance of an XmlTextReader object, and populate it with the XML file. Typically, the XmlTextReader class is used if you need to access the XML as raw data without the overhead of a DOM; thus, the XmlTextReader class provides a faster mechanism for reading XML. The XmlTextReader class has different constructors to specify the location of the XML data. The following code creates an instance of the XmlTextReader class and loads the Books.xml file. Add the following code to the Main procedure of Class1.

7. XmlTextReader reader = new XmlTextReader (“books.xml”);

  1. Read through the XML. (Note that this step demonstrates an outer “while” loop, and the next two steps demonstrate how to use that loop to read the XML.) After you create the XmlTextReader object, use the Read method to read the XML data. The Read method continues to move through the XML file sequentially until it reaches the end of the file, at which point the Read method returns a value of “False.”

9. while (reader.Read())

10. {

  1. 11.     // Do some work here on the data.
  2. 12.         Console.WriteLine(reader.Name);

13. }

14. Console.ReadLine();

  1. Inspect the nodes. To process the XML data, each record has a node type that can be determined from the NodeType property. The Name and Value properties return the node name (the element and attribute names) and the node value (the node text) of the current node (or record). The NodeType enumeration determines the node type. The following sample code displays the name of the elements and the document type. Note that this sample ignores element attributes.

16. while (reader.Read())

17. {

  1. 18.     switch (reader.NodeType)
  2. 19.     {
  3. 20.         case XmlNodeType.Element: // The node is an element.
  4. 21.             Console.Write(“<” + reader.Name);
  5. 22.    Console.WriteLine(“>”);
  6. 23.             break;
  7. 24.   case XmlNodeType.Text: //Display the text in each element.
  8. 25.             Console.WriteLine (reader.Value);
  9. 26.             break;
  10. 27.   case XmlNodeType. EndElement: //Display the end of the element.
  11. 28.             Console.Write(“</” + reader.Name);
  12. 29.    Console.WriteLine(“>”);
  13. 30.             break;
  14. 31.     }

32. }

  1. Inspect the attributes. Element node types can include a list of attribute nodes that are associated with them. The MovetoNextAttribute method moves sequentially through each attribute in the element. Use the HasAttributes property to test whether the node has any attributes. The AttributeCount property returns the number of attributes for the current node.

34. while (reader.Read())

35. {

  1. 36.        switch (reader.NodeType)
  2. 37.        {
  3. 38.            case XmlNodeType.Element: // The node is an element.
  4. 39.                Console.Write(“<” + reader.Name);
  5. 40.
  6. 41.                while (reader.MoveToNextAttribute()) // Read the attributes.
  7. 42.                    Console.Write(” ” + reader.Name + “='” + reader.Value + “‘”);
  8. 43.       Console.WriteLine(“>”);
  9. 44.                break;
  10. 45.      case XmlNodeType.Text: //Display the text in each element.
  11. 46.                Console.WriteLine (reader.Value);
  12. 47.                break;
  13. 48.      case XmlNodeType. EndElement: //Display the end of the element.
  14. 49.                Console.Write(“</” + reader.Name);
  15. 50.       Console.WriteLine(“>”);
  16. 51.                break;
  17. 52.        }
  18. 53.    }
  1. Save and close your project.

Back to the top

Complete code listing

using System;

using System.Xml;

 

namespace ReadXMLfromFile

{

/// <summary>

/// Summary description for Class1.

/// </summary>

class Class1

{

static void Main(string[] args)

{

XmlTextReader reader = new XmlTextReader (“books.xml”);

while (reader.Read())

{

switch (reader.NodeType)

{

case XmlNodeType.Element: // The node is an element.

Console.Write(“<” + reader.Name);

Console.WriteLine(“>”);

break;

case XmlNodeType.Text: //Display the text in each element.

Console.WriteLine (reader.Value);

break;

case XmlNodeType.EndElement: //Display the end of the element.

Console.Write(“</” + reader.Name);

Console.WriteLine(“>”);

break;

}

}

Console.ReadLine();

}

}

}

Back to the top

Sample output

<bookstore>

<book>

<title>

The Autobiography of Benjamin Franklin

</title>

<author>

<first-name>

Benjamin

</first-name>

<last-name>

Franklin

</last-name>

</author>

<price>

8.99

</price>

</book>

<book>

<title>

The Confidence Man

</title>

<author>

<first-name>

Herman

</first-name>

<last-name>

Melville

</last-name>

</author>

<price>

11.99

</price>

</book>

<book>

<title>

The Gorgias

</title>

<author>

<name>

Plato

</name>

</author>

<price>

9.99

</price>

</book>

</bookstore>

Back to the top

Troubleshooting

When you test the code, you may receive the following exception error message: Unhandled Exception: System.Xml.XmlException: Unexpected XML declaration. The XML declaration must be the first node in the document, and no white space characters are allowed to appear before it.

Additional information: System error. The exception error occurs on the following line of code: While

(reader.Read())

The exception error is caused by an invalid processing instruction. For example, the processing instruction may contain extraneous spaces. The following is an example of an invalid processing instruction:

<?xml version=’1.0′ ?>

This xml tag has a space preceding the ‘<’ bracket. Remove the preceding whitespace to resolve the error.

Back to the top

REFERENCES

The following file is available for download from the Microsoft Download Center:

Collapse this imageExpand this image

 

Download the Books.exe package now. (http://download.microsoft.com/download/xml/utility/1.0.0.1/wxp/en-us/books.exe)

For more information about .NET Framework XML classes and C#, visit the following Microsoft Developer Network (MSDN) Web site:

http://msdn.microsoft.com/en-us/magazine/cc302158.aspx (http://msdn.microsoft.com/en-us/magazine/cc302158.aspx)

For more information about the XmlReader class, visit the following MSDN Web site:

http://msdn2.microsoft.com/en-us/library/system.xml.xmlreader(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.xml.xmlreader(vs.71).aspx)

For more information about how to use XmlReader to read XML data, visit the following MSDN Web sites:

http://msdn2.microsoft.com/en-us/library/aa720470(VS.71).aspx (http://msdn2.microsoft.com/en-us/library/aa720470(VS.71).aspx)

http://msdn2.microsoft.com/en-us/library/tfz3cz6w(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/tfz3cz6w(vs.71).aspx)

For more general information about Visual C# .NET or XML in .NET, see the following Usenet newsgroups:

microsoft.public.dotnet.languages.csharp (http://go.microsoft.com/fwlink/?linkid=5217)

microsoft.public.dotnet.xml (http://msdn.microsoft.com/newsgroups/default.aspx?dg=microsoft.public.dotnet.xml&lang=en&cr=US)

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s