2008-09-30 25 views
1

我們有一個VXML項目,第三方解析它來爲我們提供電話導航系統。我們要求他們輸入一個ID代碼來留言,這是我們公司後來審查的。關於XMLTextWriters和Streams的問題

目前,我們有這方面的工作如下:

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送入它......但爲什麼它首先讀取整個字符串?這不是沒有效率嗎?

有沒有更好的方法來編寫上面的代碼?

回答

1

是的,只是直接寫入響應Output(IO.StreamWriter)或OutputStream(IO.Stream):

XmlTextWriter XML_Writer = new XmlTextWriter(HttpContext.Current.Response.OutputStream, HttpContext.Current.Response.Encoding); 
//... 
XML_Writer.Flush(); 
0

之後,我可以叫XML_Writer.Flush(),對不對?這將沖洗XML的流?

+0

是的,應該這樣做 – 2008-09-30 19:57:03

0

您可以直接寫入響應流:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

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

要設置添加到您的作家是最好使用較新的XmlWriterSettings類。將其作爲XmlWriter.Create函數的參數。

+0

這隻適用於XmlWriter類,而不是我使用的XmlTextWriter ...我會因爲更改而失去什麼? – Jeff 2008-09-30 20:06:48