可以使用XmlWriter将XML写入内存吗?

我正在创建一个返回XML的ASHX,但是当我这样做时它需要一条路径

XmlWriter writer = XmlWriter.Create(returnXML, settings) 

但是returnXML现在只是一个空字符串(猜测它不起作用),但是我需要将XML编写成我可以作为响应文本发送的东西。 我尝试了XmlDocument,但它给了我一个错误,期待一个字符串。 我在这里想念的是什么?

如果你真的想写入内存,请传入StringWriterStringBuilder如下所示:

 using System; using System.Text; using System.Xml; public class Test { static void Main() { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; StringBuilder builder = new StringBuilder(); using (XmlWriter writer = XmlWriter.Create(builder, settings)) { writer.WriteStartDocument(); writer.WriteStartElement("root"); writer.WriteStartElement("element"); writer.WriteString("content"); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndDocument(); } Console.WriteLine(builder); } } 

但是,如果要将其直接写入响应,则可以传入HttpResponse.Output ,而不是TextWriter

 using (XmlWriter writer = XmlWriter.Create(Response.Output, settings)) { // Write into it here } 

我身边缺少一些东西:刷新XmlWriter的缓冲区:

 static void Main() { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; StringBuilder builder = new StringBuilder(); using (XmlWriter writer = XmlWriter.Create(builder, settings)) { writer.WriteStartDocument(); writer.WriteStartElement("root"); writer.WriteStartElement("element"); writer.WriteString("content"); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndDocument(); writer.Flush(); } Console.WriteLine(builder); } 
  StringBuilder xml = new StringBuilder(); TextWriter textWriter = new StringWriter(xml); XmlWriter xmlWriter = new XmlTextWriter(textWriter); 

然后,使用xmlWriter执行所有xml写入,并将其直接写入StringBuilder。

编辑:感谢Jon Skeet的评论:

  StringBuilder xml = new StringBuilder(); XmlWriter xmlWriter = XmlWriter.Create(xml); 

最好的方法是直接写入响应输出流。 它是一个内置于ASP.NET的流,允许您将任何输出写为流,在这种情况下,您可以将XML写入其中。