Home
C#
XmlTextWriter
Updated May 4, 2023
Dot Net Perls
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.
XmlTextReader
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.
StringWriter
Tuple
Info The StringWriter is used as a backing store for the XmlTextWriter. XmlTextWriter to the StringWriter instance you passed to it.
Next We see the WriteStartDocument and WriteStateElement methods. These begin the XML document and then begin an element.
Note When you pass a string to WriteStartElement, the XmlTextWriter then will know the element tag you are writing.
Finally We see a foreach loop that enumerates the array of Tuple instances. In each iteration, we write an Employee element.
foreach
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.
This page was last updated on May 4, 2023 (edit).
Home
Changes
© 2007-2025 Sam Allen