How to convert an XmlDocument to an array<byte>?
Try the following:
using System.Text;using System.Xml;XmlDocument dom = GetDocument()byte[] bytes = Encoding.Default.GetBytes(dom.OuterXml);
If you want to preserve the text encoding of the document, then change the Default
encoding to the desired encoding, or follow Jon Skeet's suggestion.
Write it to a MemoryStream
and then call ToArray
on the stream:
using System;using System.IO;using System.Text;using System.Xml;class Test{ static void Main(string[] args) { XmlDocument doc = new XmlDocument(); XmlElement root = doc.CreateElement("root"); XmlElement element = doc.CreateElement("child"); root.AppendChild(element); doc.AppendChild(root); MemoryStream ms = new MemoryStream(); doc.Save(ms); byte[] bytes = ms.ToArray(); Console.WriteLine(Encoding.UTF8.GetString(bytes)); }}
For more control over the formatting, you can create an XmlWriter
from the stream and use XmlDocument.WriteTo(writer)
.
Steve Guidi: Thanks! Your code was right on the money! Here's how I solved my special characters issue:
public static byte[] ConvertToBytes(XmlDocument doc) { Encoding encoding = Encoding.UTF8; byte[] docAsBytes = encoding.GetBytes(doc.OuterXml); return docAsBytes; }