【问题标题】:Question about XMLTextWriters and Streams关于 XMLTextWriters 和 Streams 的问题
【发布时间】:2010-09-14 08:32:28
【问题描述】:

我们有一个 VXML 项目,第 3 方对其进行解析以向我们提供电话导航系统。我们要求他们输入一个 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 输入其中...但是为什么它首先读取整个字符串?这不是效率低吗?

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

【问题讨论】:

    标签: asp.net stream xmltextwriter


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您可以直接写入响应流:

        Response.Cache.SetCacheability(HttpCacheability.NoCache);

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

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

        【讨论】:

        • 这仅适用于 XmlWriter 类,不适用于我正在使用的 XmlTextWriter...更改会失去什么?
        • XmlTextWriter 继承自 XmlWriter 类。原则上,输出载体(文本/流等)与书写部分分离。 XmlWriter.Create 是在 .NET 2.0 中引入的,是制作 XML 编写器的“首选方式”。请参阅 XmlWriter.Create 的 msdn 文档中的备注部分。
        猜你喜欢
        • 2010-10-16
        • 2022-01-25
        • 1970-01-01
        • 2021-11-06
        • 2010-12-30
        • 2010-11-26
        • 2012-03-06
        • 2019-04-05
        • 2021-01-19
        相关资源
        最近更新 更多