1

我们有一个第 3 方解析的 VXML 项目,为我们提供电话导航系统。我们要求他们输入一个 ID 代码来留言,稍后我们公司会对其进行审核。

我们目前的工作如下:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Stream m = new MemoryStream(); //Create Memory Stream - Used to create XML document in Memory
XmlTextWriter XML_Writer = new XmlTextWriter(m, System.Text.Encoding.UTF8);
XML_Writer.Formatting = Formatting.Indented;
XML_Writer.WriteStartDocument();
/* snip - writing a valid XML document */
XML_Writer.WriteEndDocument();
XML_Writer.Flush();
m.Position = 0;
byte[] b = new byte[m.Length];
m.Read(b, 0, (int)m.Length);
XML_Writer.Close();
HttpContext.Current.Response.Write(System.Text.Encoding.UTF8.GetString(b, 0, b.Length));

我只是在维护这个应用程序,不是我写的……但结尾部分对我来说似乎很复杂。

我知道它正在获取输出流并将写入的 XML 输入其中……但为什么它首先读取整个字符串?这不是低效吗?

有没有更好的方法来编写上面的代码?

4

3 回答 3

1

是的,只需直接写入响应Output(IO.StreamWriter)或OutputStream(IO.Stream):

XmlTextWriter XML_Writer = new XmlTextWriter(HttpContext.Current.Response.OutputStream, HttpContext.Current.Response.Encoding);
//...
XML_Writer.Flush();
于 2008-09-30T19:53:27.707 回答
0

之后我就可以调用 XML_Writer.Flush() 了,对吧?这会将 XML 刷新到流中吗?

于 2008-09-30T19:56:04.097 回答
0

您可以直接写入响应流:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

XmlWriter XML_Writer = XmlWriter.Create(HttpContext.Current.Response.Output);

要将设置添加到编写器,最好使用较新的XmlWriterSettings类。将其作为参数提供给 XmlWriter.Create 函数。

于 2008-09-30T19:57:29.880 回答