I have been using this handy function to "beautify" an xml document, so that it's formatted with indentations and newlines. But with bigger documents (~1MB), I get an OutOfMemoryException at doc.Save(writer) for some reason. How can I fix this issue?
public static string BeautifyXmlDocument(XmlDocument doc)
{
MemoryStream sb = new MemoryStream();
XmlWriterSettings s = new XmlWriterSettings();
s.Indent = true;
s.IndentChars = " ";
s.NewLineChars = "\r\n";
s.NewLineHandling = NewLineHandling.Replace;
s.Encoding = new UTF8Encoding(false);
XmlWriter writer = XmlWriter.Create(sb, s);
doc.Save(writer);
writer.Close();
return Encoding.UTF8.GetString(sb.ToArray());
}
Stack trace:
at System.IO.MemoryStream.set_Capacity(Int32 value)
at System.IO.MemoryStream.EnsureCapacity(Int32 value)
at System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at System.Xml.XmlUtf8RawTextWriter.FlushBuffer()
at System.Xml.XmlUtf8RawTextWriter.RawText(Char* pSrcBegin, Char* pSrcEnd)
at System.Xml.XmlUtf8RawTextWriter.RawText(String s)
at System.Xml.XmlUtf8RawTextWriter.WriteFullEndElement(String prefix, String localName, String ns)
at System.Xml.XmlUtf8RawTextWriterIndent.WriteFullEndElement(String prefix, String localName, String ns)
at System.Xml.XmlWellFormedWriter.WriteFullEndElement()
at System.Xml.XmlElement.WriteTo(XmlWriter w)
at System.Xml.XmlElement.WriteContentTo(XmlWriter w)
at System.Xml.XmlElement.WriteTo(XmlWriter w)
at System.Xml.XmlElement.WriteContentTo(XmlWriter w)
at System.Xml.XmlElement.WriteTo(XmlWriter w)
at System.Xml.XmlElement.WriteContentTo(XmlWriter w)
at System.Xml.XmlElement.WriteTo(XmlWriter w)
at System.Xml.XmlElement.WriteContentTo(XmlWriter w)
at System.Xml.XmlElement.WriteTo(XmlWriter w)
at System.Xml.XmlElement.WriteContentTo(XmlWriter w)
at System.Xml.XmlElement.WriteTo(XmlWriter w)
at System.Xml.XmlDocument.Save(XmlWriter w)