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