たXmlWriterでメモリにXMLを書くことは可能?
質問
私は、XMLは、しかし、それはパスを期待返すASHXを作成しています私が行うとき、
XmlWriter writer = XmlWriter.Create(returnXML, settings)
しかしreturnXMLは(それが動作しません推測)今ちょうど空の文字列である、しかし、私はその後、応答テキストとして送信することができます何かにXMLを記述する必要があります。私は常にXmlDocumentをしようとしたが、それは私に文字列を期待して、エラーを与えました。私はここで行方不明ですか?
解決
あなたが本当にメモリに書き込みたい場合は、
、StringWriter
に渡したり、このような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
のある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);
すると、すべてのXML書き込みを行うためのXmlWriterを使用し、それはStringBuilderのに直接書き込みます。
編集:ジョンスキートのコメントに感謝します:
StringBuilder xml = new StringBuilder();
XmlWriter xmlWriter = XmlWriter.Create(xml);
それを行うための最善の方法は、応答出力ストリームに直接書き込むことです。ビルトインだASP.NETにそのストリームは、あなたがそれにXMLを書き込むことができ、この場合にはストリームとしてどのような出力を、書くことができるようにする。
所属していません StackOverflow