2009-09-30 8 views

Odpowiedz

41

Spróbuj wykonać następujące czynności:

using System.Text; 
using System.Xml; 

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

Jeśli chcesz zachować kodowanie tekstu dokumentu, a następnie zmienić kodowanie na Default do pożądanego kodowania, lub śledzić Jon Skeet's suggestion.

+0

Zwięzłe i jasne. Miły. –

+5

To jest rozwiązanie, którego używałem do tej pory. Problem polega na tym, że ten wyrzuca wyjątek OutOfMemoryException dla dużych dokumentów XML. :/ – sunside

+0

Inną różnicą między ** dom.OuterXml ** i ** dom.Save ** jest to, że ** OuterXml ** ma dane XML w jednym długim wierszu bez formatowania. ** Metoda Save ** generuje sformatowany dokument XML z wcięciem. – tibx

24

zapisywać do MemoryStream a następnie zadzwonić ToArray na potoku:

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

Aby uzyskać większą kontrolę nad formatowaniem można utworzyć XmlWriter ze strumienia i używać XmlDocument.WriteTo(writer).

+1

jeśli zamierzasz przekazać MemoryStream jako dane wejściowe do czegoś innego, pamiętaj, aby ustawić pozycję z powrotem na zero. doc.Save (ms); posortowanie = 0; – jhilden

0

Steve Guidi: Dzięki! Twój kod był wprost na pieniądze! Oto, jak rozwiązałem problem ze specjalnymi znakami:

public static byte[] ConvertToBytes(XmlDocument doc) 
    { 
     Encoding encoding = Encoding.UTF8; 
     byte[] docAsBytes = encoding.GetBytes(doc.OuterXml); 
     return docAsBytes; 
    } 
Powiązane problemy