Я создал XmlDocument и теперь хочу преобразовать его в массив. Как это может быть сделано?
Спасибо,
Попробуйте следующее:
using System.Text;
using System.Xml;
XmlDocument dom = GetDocument()
byte[] bytes = Encoding.Default.GetBytes(dom.OuterXml);
Если вы хотите сохранить текстовую кодировку документа, измените кодировку Default
на нужную кодировку или выполните предложение Джона Скита.
Запишите его в 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)
.
MemoryStream
начальный размер: у вас есть больше возможностей для сравнения с вашими данными, чем у меня. Если вы заботитесь о производительности, вы должны тщательно ее измерять. Это позволяет вам экспериментировать с изменениями.
- person Jon Skeet; 07.11.2018
Stream
, которая отбрасывает все переданные данные, но ведет их подсчет. Есть ли у вас конкретная причина для беспокойства по этому поводу, например. сообщения об ошибках от пользователей? Или вы пытаетесь думать о потенциальных проблемах до того, как они действительно превратятся в проблемы?
- person Jon Skeet; 07.11.2018
Стив Гуиди: Спасибо! Ваш код был прямо на деньгах! Вот как я решил проблему со специальными символами:
public static byte[] ConvertToBytes(XmlDocument doc)
{
Encoding encoding = Encoding.UTF8;
byte[] docAsBytes = encoding.GetBytes(doc.OuterXml);
return docAsBytes;
}