MemoryStream对象提供了无需进行IO就可以创建Stream的方法,XmlTextWriter和XmlReader提供快速书写和读取XML内容的方法,结合MemoryStream,就可以直接在内存中构造XmlTextWriter,并用XmlReader进行读取。
使用MemoryStream和XmlTextWriter进行书写XML,需要注意两点:XmlTextWriter.Flush操作和重设MemoryStream.Position=0。
C#
<%@PageLanguage="C#"%>
<%@ImportNamespace="System.Xml"%>
<%@ImportNamespace="System.IO"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<scriptrunat="server">
protectedvoidButton1_Click(objectsender,EventArgse)
{
Response.Clear();
Response.ContentType="text/xml";
MemoryStreammsXml=newMemoryStream();
XmlTextWriterxmlWriter=newXmlTextWriter(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","Copyright1999-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.NET2.0中直接将Access数据库导入到Excel文件中");
xmlWriter.WriteElementString("description","ASP.NET2.0中直接将Access数据库导入到Excel文件中");
xmlWriter.WriteElementString("link","http://dotnet.aspx.cc/article/a933b187-06c3-4263-9eec-414a54d9c815/read.aspx");
xmlWriter.WriteElementString("pubDate","Sat,02Dec200609:39:58GMT");
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
xmlWriter.Flush();//确保书写器更新到Stream中;
msXml.Position=0;//重置流的位置,以便我们可以从头读取
XmlReaderxmlReader=XmlReader.Create(msXml);
while(xmlReader.Read())
{
if(xmlReader.Name=="rss")
{
Response.Write(xmlReader.ReadOuterXml());
}
}
Response.End();
msXml.Close();
xmlWriter.Close();
xmlReader.Close();
}
</script>
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>XmlReader读取器读取内存流MemoryStream的注意事项</title>
</head>
<body>
<formid="form1"runat="server">
<asp:ButtonID="Button1"runat="server"OnClick="Button1_Click"Text="读取数据"/>
</form>
</body>
</html>
VB.NET
ProtectedSubButton1_Click(ByValsenderAsObject,ByValeAsEventArgs)
Response.Clear
Response.ContentType="text/xml"
DimmsXmlAsMemoryStream=NewMemoryStream
DimxmlWriterAsXmlTextWriter=NewXmlTextWriter(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","Copyright1999-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
xmlWriter.WriteStartElement("item")
xmlWriter.WriteElementString("title","ASP.NET2.0中直接将Access数据库导入到Excel文件中")
xmlWriter.WriteElementString("description","ASP.NET2.0中直接将Access数据库导入到Excel文件中")
xmlWriter.WriteElementString("link","http://dotnet.aspx.cc/article/a933b187-06c3-4263-9eec-414a54d9c815/read.aspx")
xmlWriter.WriteElementString("pubDate","Sat,02Dec200609:39:58GMT")
xmlWriter.WriteEndElement
xmlWriter.WriteEndElement
xmlWriter.WriteEndElement
xmlWriter.Flush
msXml.Position=0
DimxmlReaderAsXmlReader=XmlReader.Create(msXml)
WhilexmlReader.Read
IfxmlReader.Name="rss"Then
Response.Write(xmlReader.ReadOuterXml)
EndIf
EndWhile
Response.End
msXml.Close
xmlWriter.Close
xmlReader.Close
EndSub