- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
是否可以重用 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 对一些评论提出了担忧:
The problem I found is that if an exception is thrown part-way through, for example after WriteStartElement(), then even though you Flush() the Writer and set the Stream length to 0, the Writer remains in a WriteState of Element. When you start the next document, it begins with a closing ">" (for example). Avoid reuse
几个小时前,@Mike-EEE 遇到了同样的问题:
Please provide working code of an example solution. I am running into the same problem as Nigel describes
顺便说一句,一些试错让我恢复了给定的 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());
}
关于c# - 重用 XmlTextWriter 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4919210/
我正在使用 XMLTextWriter 动态创建 XML 文档(在 VB.Net 中)。 我希望空标签看起来像这样 - 而不是这个 - 所以,我使用 WriteFullEndElement 来结束元
下面的语句有什么问题? XmlTextWriter writer = new XmlTextWriter(@"D:\project\data\" + System.DateTime.Today + @
.NET 的 XmlTextWriter 创建无效的 xml 文件。 在 XML 中,一些控制字符是允许的,例如“水平制表符”( ),但其他的则不允许,例如“垂直制表符”()。 (参见 spec。)
所以我在这里处理一些核心的旧版代码。我们正在谈论.NET 2.0。我的问题是我的程序在运行时会吐出一个异常,并显示信息说没有为标准XML找到数据。我正在使用XMLTextWriter类。因为这是工作,
我有一个页面,我只是在其中将一堆 XML 数据写入屏幕。它进行了几次数据库调用以获取所有数据: XmlTextWriter writer = new XmlTextWriter(Response.Ou
我正在处理一些非常复杂的代码,这些代码使用 XmlTextwriter 写入内存流。 Visual Studio 调试中有没有一种方法可以在我单步执行代码时查看 memorystream/XmlTex
我有一个试图保存为 xml 的结构,创建小的 XML 似乎没有问题,但是对于较大的文件,它似乎嵌套了后面的标签,对于前 30 个左右我我得到格式正确的结果: 2video.avi40 但是,一段时间后
我正在尝试创建一个信息路径表单 XML 文件。我最初是在关注这个例子 programmatically-create-infopath-form-console-app但我遇到了多个 namespac
是否可以重用 XmlTextWriter 类的同一个实例来生成更多的 xml 文档?我的意思是这样的: XmlTextWriter writer = new XmlTextWriter(); writ
我正在使用 XmlTextWriter 及其 WriteElementString 方法,例如: XmlTextWriter writer = new XmlTextWriter("filename.
我正在尝试从提供 Xml 内容的自定义 HttpHandler 中尽可能多地发挥性能。 我想知道哪个对性能更好。使用 XmlTextWriter 类或临时 StringBuilder 操作,例如: S
我卡在了这个 httpWebRequest 问题上。我需要将 XML 发送到网站。但我的要求不断得到否定的回应。我看到了一些设置了 ContentLength 的代码示例……这可能是问题所在,但我不知
当我遇到有人使用 XmlTextWriter 时,我正在使用 XmlSerializer。 这两者有什么区别? 对我来说,它们具有创建 XML 文件的相同功能。 Microsoft 网站说 XmlTe
这个方法有什么作用,为什么需要它? “go to definition”选项将我带到一个包含所有注释的函数,下面是它的用途 //Writes the XML declaration with the
我正在处理一个处理 C# 中字符串本地化的大型 XML 文件。我没有编写生成 XML 的程序,但我可以访问源代码并且我想修改它,因为它当前输出 1.0 作为版本,但它在文档中包含非法字符。 这是代码当
我正在查看 C# 中的这两个类:XmlTextWriter 和 XmlWriter。谁能解释一下区别并告诉我在哪里使用哪个? 最佳答案 XmlWriter 是一个抽象类。 XmlTextWriter是
我在我的项目中使用 XmlTextWriter 类。我不知道,如何在 Xml 中使用 CDATA。谁能帮帮我? objX.WriteElementString("category", c.Deepes
我认为我错过了一些微不足道的东西,但我在这方面浪费了很多时间,所以它的解决方案可能对其他人也有用: 我正在 Linux 下使用 libxml2 2.9.8(纯 C,而不是 C++ 绑定(bind))。
Microsoft 推荐使用 XmlWriter 而不是 XmlTextWriter https://msdn.microsoft.com/en-us/library/system.xml.xmlte
using (Stream responseStream = new MemoryStream()) { try
我是一名优秀的程序员,十分优秀!