C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Info: XmlReader reduces the memory space required for the parser. It is efficient.
Create: We instantiate an XmlReader instance by assigning an XmlReader reference to the result of the XmlReader.Create static method.
While: We see a while-loop construct that evaluates the result of the Read instance method in its expression body.
WhileIsStartElement: This returns true if the element is not an end tag. It returns true for "<article>" but false for "</article>".
Name: The attribute "name" is accessed with the "name" argument in an indexer. This is null when not found.
IndexerC# program that uses XmlReader type
using System;
using System.Xml;
class Program
{
static void Main()
{
// Create an XML reader for this file.
using (XmlReader reader = XmlReader.Create("Codex.xml"))
{
while (reader.Read())
{
// Only detect start elements.
if (reader.IsStartElement())
{
// Get element name and switch on it.
switch (reader.Name)
{
case "Codex":
// Detect this element.
Console.WriteLine("Start <Codex> element.");
break;
case "article":
// Detect this article element.
Console.WriteLine("Start <article> element.");
// Search for the attribute name on this current node.
string attribute = reader["name"];
if (attribute != null)
{
Console.WriteLine(" Has attribute name: " + attribute);
}
// Next read will contain text.
if (reader.Read())
{
Console.WriteLine(" Text node: " + reader.Value.Trim());
}
break;
}
}
}
}
}
}
Input text: Codex.xml
<?xml version="1.0" encoding="utf-8" ?>
<Codex>
<article name="backgroundworker">
Example text.
</article>
<article name="threadpool">
More text.
</article>
<article></article>
<article>Final text.</article>
</Codex>
Output
Start <Codex> element.
Start <article> element.
Has attribute name: backgroundworker
Text node: Example text.
Start <article> element.
Has attribute name: threadpool
Text node: More text.
Start <article> element.
Text node:
Start <article> element.
Text node: Final text.
And: XmlReader will not parse an entire file into an object model automatically.
Thus: The XmlReader retains more complexity. With it you can manipulate the XML at a level more suited to many programs.