【发布时间】:2010-12-02 18:48:49
【问题描述】:
我构造了一个XmlDocument,现在我想将它转换为一个数组。如何做到这一点?
谢谢,
【问题讨论】:
我构造了一个XmlDocument,现在我想将它转换为一个数组。如何做到这一点?
谢谢,
【问题讨论】:
尝试以下方法:
using System.Text;
using System.Xml;
XmlDocument dom = GetDocument()
byte[] bytes = Encoding.Default.GetBytes(dom.OuterXml);
如果您想保留文档的文本编码,则将Default编码更改为所需编码,或遵循Jon Skeet's suggestion。
【讨论】:
将其写入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 一个初始大小:你比我更能用你的数据进行基准测试。如果你关心性能,你应该仔细衡量它。这让您可以尝试更改。
Stream 实现,它会丢弃所有传递的数据,但会对其进行计数。您是否有任何具体理由对此感到担忧,例如来自用户的错误报告?或者您是否试图在潜在问题真正成为问题之前考虑它们?
Steve Guidi:谢谢!你的代码是对的!以下是我解决特殊字符问题的方法:
public static byte[] ConvertToBytes(XmlDocument doc)
{
Encoding encoding = Encoding.UTF8;
byte[] docAsBytes = encoding.GetBytes(doc.OuterXml);
return docAsBytes;
}
【讨论】: