XmlReader 读取器读取内存流 MemoryStream 的注意事项

MemoryStream对象提供了无需进行IO就可以创建Stream的方法,XmlTextWriter和XmlReader提供快速书写和读取XML内容的方法,结合MemoryStream,就可以直接在内存中构造XmlTextWriter,并用XmlReader进行读取。 
   
使用MemoryStream和XmlTextWriter进行书写XML,需要注意两点:XmlTextWriter.Flush操作和重设MemoryStream.Position = 0。 
   
C# 
   

       

            <%
            @ Page Language
            =
            "
            C#
            "
            %>
           
               
            <%
            @ Import Namespace
            =
            "
            System.Xml
            "
            
            %>
           
               
            <%
            @ Import Namespace
            =
            "
            System.IO
            "
            
            %>
           
               
            <!
            DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
            >
           
               
               
            <
            script
            runat
            ="server"
            >
           
                 protected
            void
             Button1_Click(object sender, EventArgs e)
                 {
                   Response.Clear();
                   Response.ContentType
            =
            
            "
            text/xml
            "
            ;
                   MemoryStream msXml
            =
            
            new
             MemoryStream();
                   XmlTextWriter xmlWriter
            =
            
            new
             XmlTextWriter(msXml, Encoding.UTF8);
                   xmlWriter.WriteStartElement(
            "
            rss
            "
            );
                   xmlWriter.WriteAttributeString(
            "
            version
            "
            ,
            "
            2.0
            "
            );
                   xmlWriter.WriteStartElement(
            "
            channel
            "
            );
                   xmlWriter.WriteElementString(
            "
            title
            "
            ,
            "
            【孟宪会之精彩世界】
            "
            );
                   xmlWriter.WriteElementString(
            "
            link
            "
            ,
            "
            http://dotnet.aspx.cc/Rss.aspx
            "
            );
                   xmlWriter.WriteElementString(
            "
            description
            "
            ,
            "
            NET开发技术。
            "
            );
                   xmlWriter.WriteElementString(
            "
            language
            "
            ,
            "
            zh-CN
            "
            );
                   xmlWriter.WriteElementString(
            "
            copyright
            "
            ,
            "
            Copyright 1999-2007【孟宪会之精彩世界】
            "
            );
                   xmlWriter.WriteElementString(
            "
            managingEditor
            "
            ,
            "
            amxh[AT]21cn.com
            "
            );
                   xmlWriter.WriteStartElement(
            "
            image
            "
            );
                   xmlWriter.WriteElementString(
            "
            title
            "
            ,
            "
            【孟宪会之精彩世界】
            "
            );
                   xmlWriter.WriteElementString(
            "
            width
            "
            ,
            "
            144
            "
            );
                   xmlWriter.WriteElementString(
            "
            height
            "
            ,
            "
            35
            "
            );
                   xmlWriter.WriteElementString(
            "
            link
            "
            ,
            "
            http://dotnet.aspx.cc/
            "
            );
                   xmlWriter.WriteElementString(
            "
            url
            "
            ,
            "
            http://dotnet.aspx.cc/Images/LogoRss.gif
            "
            );
                   xmlWriter.WriteEndElement();
               
                  
            //
            循环读出数据库内容列表,忽略
           
               
              
            //
            while (objReader.Read())
           
               
              
            //
            {
           
               
              
            //
             xmlWriter.WriteStartElement("item");
           
               
              
            //
             xmlWriter.WriteElementString("title", objReader.GetString(0));
           
               
              
            //
             xmlWriter.WriteElementString("description", objReader.GetString(1));
           
               
              
            //
             xmlWriter.WriteElementString("link", "http://dotnet.aspx.cc/article/a933b187-06c3-4263-9eec-414a54d9c815/read.aspx");
           
               
              
            //
             xmlWriter.WriteElementString("pubDate", objReader.GetDateTime(3).ToString("G"));
           
               
              
            //
             xmlWriter.WriteEndElement();
           
               
              
            //
            }
           
               
              
            //
            objReader.Close();
           
               
               xmlWriter.WriteStartElement(
            "
            item
            "
            );
                   xmlWriter.WriteElementString(
            "
            title
            "
            ,
            "
            ASP.NET 2.0中直接将Access数据库导入到Excel文件中
            "
            );
                   xmlWriter.WriteElementString(
            "
            description
            "
            ,
            "
            ASP.NET 2.0中直接将Access数据库导入到Excel文件中
            "
            );
                   xmlWriter.WriteElementString(
            "
            link
            "
            ,
            "
            http://dotnet.aspx.cc/article/a933b187-06c3-4263-9eec-414a54d9c815/read.aspx
            "
            );
                   xmlWriter.WriteElementString(
            "
            pubDate
            "
            ,
            "
            Sat, 02 Dec 2006 09:39:58 GMT
            "
            );
                   xmlWriter.WriteEndElement();
                   xmlWriter.WriteEndElement();
                   xmlWriter.WriteEndElement();
                   xmlWriter.Flush(); 
            //
             确保书写器更新到Stream中;
           
               
               msXml.Position
            =
            
            0
            ;
            //
             重置流的位置,以便我们可以从头读取   
           
               
               XmlReader xmlReader
            =
             XmlReader.Create(msXml);
                  
            while
             (xmlReader.Read())
                   {
                    
            if
             (xmlReader.Name
            ==
            
            "
            rss
            "
            )
                     {
                       Response.Write(xmlReader.ReadOuterXml());
                     }
                   }
                   Response.End();
                   msXml.Close();
                   xmlWriter.Close();
                   xmlReader.Close();
                 }
               
            </
            script
            >
           
               
               
            <
            html
            xmlns
            ="http://www.w3.org/1999/xhtml"
            >
           
               
            <
            head
            runat
            ="server"
            >
           
                
            <
            title
            >
            XmlReader 读取器读取内存流 MemoryStream 的注意事项
            </
            title
            >
           
               
            </
            head
            >
           
               
            <
            body
            >
           
                
            <
            form
            id
            ="form1"
             runat
            ="server"
            >
           
                  
            <
            asp:Button
            ID
            ="Button1"
             runat
            ="server"
             OnClick
            ="Button1_Click"
             Text
            ="读取数据"
            
            />
           
                
            </
            form
            >
           
               
            </
            body
            >
           
               
            </
            html
            >
           
               
                9
7
3
1
2
4
8
:

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [Asp.Net] 的这些文章也感兴趣:

ASP.NET MVC: 用db4o来做TempDataProvider
ASP.NET MVC 第五个预览版和表单提交场景
ASP.NET的本质:IIS以及进程模式
ASP.NET2.0轻松解决统计图表
ASP.NET实现数字和字符相混合的验证码
使用函数传递参数来执行数据库操作
用Asp.net实现基于XML的留言簿之三
ASP.NET动态数据预览版发布了
ASP.net服务器控件的优化选择
asp.net中一次更新DATAGRID中所有记录