This page was last reviewed on 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.
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.
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.
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 tested code examples. Pages are continually updated to stay current, with code correctness a top priority.
Sam Allen is passionate about computer languages. In the past, his work has been recommended by Apple and Microsoft and he has studied computers at a selective university in the United States.
This page was last updated on May 4, 2023 (edit).
© 2007-2024 Sam Allen.