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 >
<% @ 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 >
VB.NET
Protected
Sub
Button1_Click(
ByVal
sender
As
Object
,
ByVal
e
As
EventArgs)
Response.Clear
Response.ContentType = " text/xml "
Dim msXml As MemoryStream = New MemoryStream
Dim xmlWriter As XmlTextWriter = 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
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
msXml.Position = 0
Dim xmlReader As XmlReader = XmlReader.Create(msXml)
While xmlReader.Read
If xmlReader.Name = " rss " Then
Response.Write(xmlReader.ReadOuterXml)
End If
End While
Response.End
msXml.Close
xmlWriter.Close
xmlReader.Close
End Sub
Response.Clear
Response.ContentType = " text/xml "
Dim msXml As MemoryStream = New MemoryStream
Dim xmlWriter As XmlTextWriter = 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
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
msXml.Position = 0
Dim xmlReader As XmlReader = XmlReader.Create(msXml)
While xmlReader.Read
If xmlReader.Name = " rss " Then
Response.Write(xmlReader.ReadOuterXml)
End If
End While
Response.End
msXml.Close
xmlWriter.Close
xmlReader.Close
End Sub