Zbudowałem XmlDocument i teraz chcę przekonwertować go do tablicy. Jak to zrobić?Jak przekonwertować XmlDocument na tablicę <byte>?
Dzięki,
Zbudowałem XmlDocument i teraz chcę przekonwertować go do tablicy. Jak to zrobić?Jak przekonwertować XmlDocument na tablicę <byte>?
Dzięki,
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.
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)
.
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
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;
}
Zwięzłe i jasne. Miły. –
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
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