You can use the XmlTextReader class when you want to read a XML document in your code. The XmlTextReader moves through your document from top to bottom, one node at a time. You call the Read() method to move to the next node. This method returns true if there are more nodes to read or false once it has read the final node. The current node is provided through the properties of the XmlTextReader class, such as NodeType and Name.

C# 8.0 and .NET Core 3.0 – Modern Cross-Platform Development: Build applications with C#, .NET Core, Entity Framework Core, ASP.NET Core, and ML.NET using Visual Studio Code, 4th Edition
ASP.NET Core 3 and Angular 9: Full stack web development with .NET Core 3.1 and Angular 9, 3rd Edition
C# in Depth, 4th Edition

A node is a designation that includes comments, whitespace, opening tags, closing tags, content, and even the XML declaration at the top of your file. To get a quick understanding of nodes, you can use the XmlTextReader to run through your entire document from start to finish and display every node it encounters. The code for this task is as follows:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.IO;

using System.Xml;

 

namespace WriteToXMLFileVC

{

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

{

protected void Page_Load(object sender, EventArgs e)

{

if (!this.IsPostBack)

{

ReadXMLFile();

}

}

protected void ReadXMLFile()

{

string file = Path.Combine(Request.PhysicalApplicationPath, @”App_Data\BooksList.xml”);

FileStream fs = new FileStream(file, FileMode.Open);

XmlTextReader r = new XmlTextReader(fs);

// Use a StringWriter to build up a string of HTML that

// describes the information read from the XML document.

StringWriter writer = new StringWriter();

// Parse the file, and read each node.

while (r.Read())

{

writer.Write(“<b>Type:</b> “);

writer.Write(r.NodeType.ToString());

writer.Write(“<br>”);

// The name is available when reading the opening and closing tags

// for an element. It’s not available when reading the inner content.

if (r.Name != “”)

{

writer.Write(“<b>Name:</b> “);

writer.Write(r.Name);

writer.Write(“<br>”);

}

// The value is when reading the inner content.

if (r.Value != “”)

{

writer.Write(“<b>Value:</b> “);

writer.Write(r.Value);

writer.Write(“<br>”);

}

if (r.AttributeCount > 0)

{

writer.Write(“<b>Attributes:</b> “);

for (int i = 0; i < r.AttributeCount; i++)

{

writer.Write(” “);

writer.Write(r.GetAttribute(i));

writer.Write(” “);

}

writer.Write(“<br>”);

}

writer.Write(“<br>”);

}

fs.Close();

// Copy the string content into a label to display it.

lblXml.Text = writer.ToString();

}

}

}

The code produces the result shown in the next picture:

 

Using of XmlTextReader to read XML file as text in C#

Using of XmlTextReader to read XML file as text in C#