如何在.NET中使用XmlWriter创建XmlDocument?
许多 .NET 函数使用 XmlWriter 来输出/生成 xml。输出到文件/字符串/内存是一项非常复杂的操作:
XmlWriter xw = XmlWriter.Create(PutYourStreamFileWriterEtcHere);
xw.WriteStartElement("root");
...
有时,您需要操作生成的 Xml,因此希望将其加载到 XmlDocument 中,或者可能出于其他原因需要 XmlDocument,但必须使用 XmlWriter 生成 XML 。例如,如果您调用第 3 方库中的函数,该函数仅输出到 XmlWriter。
您可以做的事情之一是将 xml 写入字符串,然后将其加载到您的 XmlDocument 中:
StringWriter S = new StringWriter();
XmlWriter xw = XmlWriter.Create(S);
/* write away */
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(S.ToString());
但是,这是低效的 - 首先将所有 xml 信息序列化为字符串,然后再次解析该字符串以创建 DOM。
如何让 XmlWriter 直接构建 XmlDocument?
Many .NET functions use XmlWriter to output/generate xml. Outputting to a file/string/memory is a very operation:
XmlWriter xw = XmlWriter.Create(PutYourStreamFileWriterEtcHere);
xw.WriteStartElement("root");
...
Sometimes , you need to manipulate the resulting Xml and would therefore like to load it into a XmlDocument or might need an XmlDocument for some other reason but you must generate the XML using an XmlWriter. For example, if you call a function in a 3rd party library that outputs to a XmlWriter only.
One of the things you can do is write the xml to a string and then load it into your XmlDocument:
StringWriter S = new StringWriter();
XmlWriter xw = XmlWriter.Create(S);
/* write away */
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(S.ToString());
However this is inefficient - first you serialize all the xml info into a string, then you parse the string again to create the DOM.
How can you point an XmlWriter to build a XmlDocument directly?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
XmlWriter 背后的想法是等到数据修改完成后再开始写入。
XmlWriter 的构建并未考虑到您的情况。
要么
将在写作
或
The idea behind XmlWriter is to wait until you have finished modifying your data before you start writing.
XmlWriter wasn't built with your situation in mind.
Either
going to be before writing
or
XmlWriter 正在写入一个底层 Stream 对象,如果它是双向的 (MemoryStream),您只需将其重新定位回 -0-,然后在 XmlDocument.Load(stream) 中使用 Stream 对象。
HTH,
Z
There is an underlying Stream object that the XmlWriter was writing to, if it was bidirectional (MemoryStream), you could simply re-position it back to -0- and then use the Stream object in the XmlDocument.Load(stream).
HTH,
Z
这里至少有一个解决方案:
显然,当您调用 AppendChild() 时,XpathNavigator 会为您提供一个 XmlWriter
积分请转至 Martin Honnen: http://groups.google.com/group/microsoft.public.dotnet.xml/browse_thread/thread/24e4c8d249ad8299?pli=1
Here's at least one solution:
Apparently XpathNavigator gives you a XmlWriter when you call AppendChild()
Credits go to Martin Honnen on : http://groups.google.com/group/microsoft.public.dotnet.xml/browse_thread/thread/24e4c8d249ad8299?pli=1
您可以执行相反的操作:首先使用 DOM 构建
XmlDocument
,然后将其写入XmlWriter
:You could do the opposite : build the
XmlDocument
first using DOM, then write it to aXmlWriter
:您可以使用 XMLWriter 类编写 xml 文件。
这是一个例子。
You can write xml file using XMLWriter class.
Here is example for this.