2009-09-30 2 views

Antwort

41

Versuchen Sie Folgendes:

using System.Text; 
using System.Xml; 

XmlDocument dom = GetDocument() 
byte[] bytes = Encoding.Default.GetBytes(dom.OuterXml); 

Wenn Sie den Text Codierung des Dokuments beibehalten möchten, dann ändern Sie die Default Codierung auf die gewünschte Codierung oder Jon Skeet's suggestion folgen.

+0

Prägnant und klar. Nett. –

+5

Dies ist die Lösung, die ich bis jetzt verwendet habe. Das Problem ist, dass dieses eine OutOfMemoryException für große XML-Dokumente auslöst. :/ – sunside

+0

Ein weiterer Unterschied zwischen ** dom.OuterXml ** und ** dom.Save ** ist, dass ** OuterXml ** XML-Daten in einer langen Zeile ohne Formatierung enthält. ** Save ** -Methode erzeugt formatiertes XML-Dokument mit Einrückung. – tibx

24

es Schreibe einen MemoryStream und dann ToArray auf dem Strom nennen:

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)); 
    } 
} 

Für mehr Kontrolle über die Formatierung, erhalten Sie einen XmlWriter aus dem Stream erstellen und XmlDocument.WriteTo(writer) verwenden.

+1

Wenn Sie den MemoryStream als Eingabe an etwas anderes übergeben werden, denken Sie daran, die Position wieder auf Null zu setzen. doc.Save (ms); ms.Position = 0; – jhilden

0

Steve Guidi: Danke! Dein Code war richtig auf dem Geld! Hier ist, wie ich mein Sonderzeichen Problem gelöst habe:

Verwandte Themen