是否可以重用 XmlTextWriter 类的相同实例来生成更多 xml 文档?我的意思是这样的:
XmlTextWriter writer = new XmlTextWriter();
writer.WriteStartDocument();
writer.WriteStartElement("Message1");
writer.WriteEndElement();
writer.WriteEndDocument();
// do something with xml created
...
writer.Reset() // ?
writer.WriteStartDocument();
writer.WriteStartElement("Message2");
writer.WriteEndElement();
writer.WriteEndDocument();
// do something with xml created
...
最佳答案
简单的回答:是的,可以这样做。
但是如果底层流不指向文件,这将被实现。 MemoryStream 可能是一个很好的例子。
由于 MemoryStream 将流保存在“内存中”,您可以使用 XmlTextWriter 编写大量 XML 文件,并在结束每个文档后,执行 MemoryStream.ToArray() 并将其作为 File.WriteAllBytes 的参数。
写入所有字节后,您将清除内存流。
你可以通过调用 MemoryStream.SetLength 方法清除你的内存流并给 0 作为长度:
在此处阅读有关 XmlTextWriter 构造函数的流重载的更多信息:
这对于 File.WriteAllBytes:
关于重用
XmlTextWriter
时的一些问题几年前@NigelTouch 对一些评论提出了关注:
几个小时前,@Mike-EEE 遇到了同样的问题:
顺便说一句,一些试错让我恢复了给定的
XmlTextWriter
以根据需要多次重用它: using(MemoryStream stream = new MemoryStream())
using(StreamReader streamReader = new StreamReader(stream))
using(XmlTextWriter writer = new XmlTextWriter(stream, Encoding.UTF8))
{
writer.WriteStartDocument(true);
writer.WriteStartElement("a");
try
{
throw new Exception();
}
catch
{
// This line makes de magic: ending the document
// avoids the issue mentioned by @NigelTouch
writer.WriteEndDocument();
writer.Flush();
stream.SetLength(0);
}
writer.WriteStartDocument(true);
writer.WriteStartElement("b");
writer.WriteEndElement();
writer.Flush();
stream.Position = 0;
Console.WriteLine(streamReader.ReadToEnd());
}