Как преобразовать XmlDocument в массив <byte>? - PullRequest
25 голосов
/ 30 сентября 2009

Я создал XmlDocument и теперь я хочу преобразовать его в массив. Как это можно сделать?

Спасибо

Ответы [ 3 ]

45 голосов
/ 30 сентября 2009

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

using System.Text;
using System.Xml;

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

Если вы хотите сохранить кодировку текста документа, измените кодировку Default на желаемую кодировку или выполните предложение Джона Скита .

28 голосов
/ 30 сентября 2009

Запишите его в 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).

0 голосов
/ 13 ноября 2010

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

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