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

MemoryStream对象提供了无需进行IO就可以创建Stream的方法,XmlTextWriter和XmlReader提供快速书写和读取XML内容的方法,结合MemoryStream,就可以直接在内存中构造XmlTextWriter,并用XmlReader进行读取。

使用MemoryStream和XmlTextWriter进行书写XML,需要注意两点:XmlTextWriter.Flush操作和重设MemoryStream.Position = 0。

<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>

 

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();
    }



 

posted on 2007-11-28 19:46  执法长老  阅读(468)  评论(0编辑  收藏  举报

导航