XmlTextWriter. This type renders XML data to a string. This string remains in the memory of the C# program. We use an underlying buffer—in this case, a StringWriter instance.
This type is useful for in-memory generation of XML. Because it works iteratively, it can provide faster XML generation than other approaches.
First, this program includes the System.Xml and System.IO namespaces. These are for the XmlTextWriter and StringWriter. The program creates an array of 4 Tuple instances.
using System;
using System.IO;
using System.Xml;
class Program
{
static void Main()
{
// Create an array of four Tuples.
var array = new Tuple<int, string, string, int>[4];
array[0] = new Tuple<int, string, string, int>(1,
"David", "Smith", 10000);
array[1] = new Tuple<int, string, string, int>(3,
"Mark", "Drinkwater", 30000);
array[2] = new Tuple<int, string, string, int>(4,
"Norah", "Miller", 20000);
array[3] = new Tuple<int, string, string, int>(12,
"Cecil", "Walker", 120000);
// Use StringWriter as backing for XmlTextWriter.
using (StringWriter str = new StringWriter())
using (XmlTextWriter xml = new XmlTextWriter(str))
{
// Root.
xml.WriteStartDocument();
xml.WriteStartElement("List");
xml.WriteWhitespace("\n");
// Loop over Tuples.
foreach (var element in array)
{
// Write Employee data.
xml.WriteStartElement("Employee");
xml.WriteElementString("ID", element.Item1.ToString());
xml.WriteElementString("First", element.Item2);
xml.WriteWhitespace("\n ");
xml.WriteElementString("Last", element.Item3);
xml.WriteElementString("Salary", element.Item4.ToString());
xml.WriteEndElement();
xml.WriteWhitespace("\n");
}
// End.
xml.WriteEndElement();
xml.WriteEndDocument();
// Result is a string.
string result = str.ToString();
Console.WriteLine("Length: {0}", result.Length);
Console.WriteLine("Result: {0}", result);
}
}
}Length: 441
Result: <?xml version="1.0" encoding="utf-16"?><List>
<Employee><ID>1</ID><First>David</First>
<Last>Smith</Last><Salary>10000</Salary></Employee>
<Employee><ID>3</ID><First>Mark</First>
<Last>Drinkwater</Last><Salary>30000</Salary></Employee>
<Employee><ID>4</ID><First>Norah</First>
<Last>Miller</Last><Salary>20000</Salary></Employee>
<Employee><ID>12</ID><First>Cecil</First>
<Last>Walker</Last><Salary>120000</Salary></Employee>
</List>
Example notes. You will notice there are some calls to WriteWhitespace in the code. These are present to make the output look a bit nicer.
Also We see a matching pair of WriteEnd methods. These match the WriteStartDocument and WriteEndElement methods called earlier.
Tip It is important you match all Start methods with End methods. The program will not work correctly unless you do this.
After constructing XmlTextWriter with a backing stream, you must use WriteStartDocument. All Start methods must be matched by End methods such as WriteEndDocument.
Dot Net Perls is a collection of pages with code examples, which are updated to stay current. Programming is an art, and it can be learned from examples.
Donate to this site to help offset the costs of running the server. Sites like this will cease to exist if there is no financial support for them.
Sam Allen is passionate about computer languages, and he maintains 100% of the material available on this website. He hopes it makes the world a nicer place.