XML を返す ASHX を作成していますが、実行時にパスが必要です。
XmlWriter writer = XmlWriter.Create(returnXML, settings)
しかし、returnXML は今のところ単なる空の文字列です (それは機能しないと思います) が、応答テキストとして送信できるものに XML を書き込む必要があります。XmlDocument を試しましたが、文字列を期待するエラーが発生しました。ここで何が欠けていますか?
本当にメモリに書き込みたい場合は、次のように 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.Output
which is a を渡すことができます。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 を書き込むことができます。