21

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

XmlWriter writer = XmlWriter.Create(returnXML, settings)

但是returnXML 现在只是一个空字符串(我猜这行不通),但是我需要将 XML 写入可以作为响应文本发送的内容。我尝试了 XmlDocument,但它给了我一个期望字符串的错误。我在这里想念什么?

4

4 回答 4

47

如果您真的想写入内存,请像这样传入 aStringWriter或 a StringBuilder

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.Outputwhich is aTextWriter代替:

using (XmlWriter writer = XmlWriter.Create(Response.Output, settings))
{
    // Write into it here
}
于 2009-03-25T20:00:18.723 回答
6

我这边缺少一些东西:刷新 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);
}
于 2012-03-09T16:33:02.677 回答
3
    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);
于 2009-03-25T20:01:27.693 回答
2

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

于 2009-03-25T20:00:51.173 回答