2009-09-30 2 views

ответ

41

Попробуйте следующее:

using System.Text; 
using System.Xml; 

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

Если вы хотите сохранить кодировку текста документа, а затем изменить Default кодирования до нужной кодировки, или следовать Jon Skeet's suggestion.

+0

Краткий и ясный. Ницца. –

+5

Это решение, которое я использовал до сих пор. Проблема заключается в том, что этот метод генерирует исключение OutOfMemoryException для больших XML-документов. :/ – sunside

+0

Еще одна разница между ** dom.OuterXml ** и ** dom.Save ** заключается в том, что ** OuterXml ** имеет XML-данные в одной длинной строке без форматирования. ** Сохранить ** метод создает отформатированный XML-документ с отступом. – tibx

24

записать его на MemoryStream, а затем вызвать ToArray на поток:

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

Для большего контроля над форматированием, вы можете создать XmlWriter из потока и использовать XmlDocument.WriteTo(writer).

+1

Если вы собираетесь передавать MemoryStream в качестве входного сигнала для чего-то еще, не забудьте установить позицию обратно в ноль. doc.Save (мс); ms.Position = 0; – jhilden

0

Steve Guidi: Спасибо! Ваш код был прав на деньги! Вот как я решил выпуск своих специальных символов:

public static byte[] ConvertToBytes(XmlDocument doc) 
    { 
     Encoding encoding = Encoding.UTF8; 
     byte[] docAsBytes = encoding.GetBytes(doc.OuterXml); 
     return docAsBytes; 
    } 
Смежные вопросы