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 a を渡すことができます。TextWriter

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 に答える