ASP.Net+XML打造留言薄
發(fā)表時間:2024-05-15 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]一.概述: 留言簿是網(wǎng)站的一個重要組成部分,是訪問者發(fā)表意見的場所,也是網(wǎng)站管理員了解網(wǎng)站基本運行情況的有力工具,所以留言簿在現(xiàn)在的網(wǎng)站中扮演了十分重要的角色! 〔贿^在以前開發(fā)一個留言簿并不是一件容易的事,開發(fā)者的工作量往往會很大。而現(xiàn)在隨著微軟推出VS.NET,相應(yīng)的技術(shù)也推陳出新。特別是X...
一.概述:
留言簿是網(wǎng)站的一個重要組成部分,是訪問者發(fā)表意見的場所,也是網(wǎng)站管理員了解網(wǎng)站基本運行情況的有力工具,所以留言簿在現(xiàn)在的網(wǎng)站中扮演了十分重要的角色。
不過在以前開發(fā)一個留言簿并不是一件容易的事,開發(fā)者的工作量往往會很大。而現(xiàn)在隨著微軟推出VS.NET,相應(yīng)的技術(shù)也推陳出新。特別是XML技術(shù)在.NET Framework中的廣泛運用,使得整個.NET構(gòu)架具有十分優(yōu)越的基礎(chǔ)。而ASP.NET中推出的嶄新的編程模型更使得開發(fā)Web應(yīng)用程序變得非常容易。本文就結(jié)合ASP.NET技術(shù)和XML技術(shù)的優(yōu)點向大家介紹如何打造一個屬于自己的留言簿。
二.實現(xiàn)方法:
一個基本的留言簿應(yīng)至少包括兩個功能:接受用戶輸入的信息并保存該信息到后臺數(shù)據(jù)庫;顯示用戶輸入的信息。用戶輸入的信息一般包括用戶名、Email地址、QQ號碼、用戶主頁、留言信息等,這些信息通常是保存在后臺數(shù)據(jù)庫的某個表中的,不過本文要運用一個XML文件來存儲這些信息。顯示用戶輸入的信息時一般得把所有的信息都顯示出來,這里的方法就是從XML文件中讀取數(shù)據(jù)并運用XSLT技術(shù)對其進行格式轉(zhuǎn)換,最后以HTML的形式顯示在瀏覽器中。
這樣,我們的留言簿就需要兩個Web頁面,一個用于接受用戶的輸入信息,另一個用于顯示用戶已經(jīng)輸入過的信息。而存儲信息的XML文件(guestbook.xml)則需具有如下的結(jié)構(gòu):
<?xml version="1.0" encoding="GB2312"?>
<guestbook>
<guest>
<name>令狐沖</name>
<email>doose@etang.com</email>
<qq>10102350</qq>
<homepage>www.doose.com</homepage>
<comment>本留言簿由"令狐沖"創(chuàng)建,希望你能喜歡哦:)要知道如何創(chuàng)建一個屬于自己的留言簿,那么就請仔細閱讀《運用ASP.NET和XML技術(shù)打造留言簿》一文!</comment>
</guest>
</guestbook>
下面我們先來創(chuàng)建用于接受用戶輸入信息的Web頁面-GuestBook.aspx。根據(jù)前面所提的基本要求,該Web頁面包括了以下幾個部分:留言簿標題、"用戶名:"標簽及輸入框、"Email地址:"標簽及輸入框、"QQ號碼:"標簽及輸入框、"個人主頁:"標簽及輸入框、"留言信息:"標簽及輸入框、一個"確定"按鈕、一個"重置"按鈕、一個"查看留言簿"按鈕,同時該頁面還包括了兩個驗證按鈕,分別用于驗證用戶名以及Email地址是否為空,若為空,則提醒用戶輸入。同時,為使留言簿具有良好的用戶界面,我運用了表格進行頁面布置,這樣留言簿中的各個成分就能有條有理,層次分明了。有關(guān)該Web頁面的詳細代碼請參考文后附帶的源代碼,這里就不給出了。頁面布置的圖示如下:
圖1
完成了該Web頁面的布置,我們僅僅是完成了一部分的工作,到此為止我們并沒有進行過真正的編碼。我想大家對ASP.NET中的代碼后置技術(shù)肯定是了解或熟悉的,它將Web頁面的布置工作和后端的編碼工作區(qū)分開來,達到了良好的分離效果。下面我們就為該Web頁面中的三個按鈕分別編寫消息相應(yīng)函數(shù):
private void btnOK_Click(object sender, System.EventArgs e)
{
SaveXMLData();
name.Text = ";
email.Text = ";
qq.Text = ";
homepage.Text = ";
comment.Text = ";
}
private void btnReset_Click(object sender, System.EventArgs e)
{
name.Text = ";
email.Text = ";
qq.Text = ";
homepage.Text = ";
comment.Text = ";
}
private void btnView_Click(object sender, System.EventArgs e)
{
// 顯示所有用戶的留言信息
Response.Redirect( "ViewGuestBook.aspx" );
}
其中,第一個按鈕是最重要的,它能將用戶的輸入信息存儲到XML文件中,調(diào)用的方法就是SaveXMLData();而第二個按鈕僅僅完成文本框的重置清空工作;第三個按鈕的作用是運用另一個Web頁面顯示所有的用戶輸入信息。同時,第一個按鈕在成功保存信息后也會將瀏覽器導向到顯示所有用戶輸入信息的頁面。
下面我們來詳細分析一下SaveXMLData()方法,其實現(xiàn)如下:
private void SaveXMLData()
{
try
{
// 創(chuàng)建一個XmlDocument對象,用于載入存儲信息的XML文件
XmlDocument xdoc = new XmlDocument();
xdoc.Load( Server.MapPath( "guestbook.xml" ));
// 創(chuàng)建一個新的guest節(jié)點并將它添加到根節(jié)點下
XmlElement parentNode = xdoc.CreateElement( "guest" );
xdoc.DocumentElement.PrependChild( parentNode );
// 創(chuàng)建所有用于存儲信息的節(jié)點
XmlElement nameNode = xdoc.CreateElement( "name" );
XmlElement emailNode = xdoc.CreateElement( "email" );
XmlElement qqNode = xdoc.CreateElement( "qq" );
XmlElement homepageNode = xdoc.CreateElement( "homepage" );
XmlElement commentNode = xdoc.CreateElement( "comment" );
// 獲取文本信息
XmlText nameText = xdoc.CreateTextNode( name.Text );
XmlText emailText = xdoc.CreateTextNode( email.Text );
XmlText qqText = xdoc.CreateTextNode( qq.Text );
XmlText homepageText = xdoc.CreateTextNode( homepage.Text );
XmlText commentText = xdoc.CreateTextNode( comment.Text );
// 將上面創(chuàng)建的各個存儲信息的節(jié)點添加到guest節(jié)點下但并不包含最終的值
parentNode.AppendChild( nameNode );
parentNode.AppendChild( emailNode );
parentNode.AppendChild( qqNode );
parentNode.AppendChild( homepageNode );
parentNode.AppendChild( commentNode );
// 將上面獲取的文本信息添加到與之相對應(yīng)的節(jié)點中
nameNode.AppendChild( nameText );
emailNode.AppendChild( emailText );
qqNode.AppendChild( qqText );
homepageNode.AppendChild( homepageText );
commentNode.AppendChild( commentText );
// 保存存儲信息的XML文件
xdoc.Save( Server.MapPath( "guestbook.xml" ));
// 顯示所有用戶的留言信息
Response.Redirect( "ViewGuestBook.aspx" );
}
catch( Exception e ) {}
}
該方法主要運用了XmlDocument類、XmlElement類以及XmlText類等,這些類都是包含在System.Xml命名空間中的,所以請在代碼文件的開頭處添加using System.Xml的語句。該方法運用了一個try-catch語句塊,在try部分首先通過創(chuàng)建一個XmlDocument對象來載入XML文件,然后創(chuàng)建根節(jié)點的兒子-guest節(jié)點并在guest節(jié)點下添加存儲信息所必須的五個子節(jié)點。所有這些子節(jié)點都是XmlElement對象,它們是通過XmlDocument對象的CreateElement()方法來獲取的。同時,XmlDocument對象還通過CreateTextNode()方法來獲取文本信息并在后面將其添加到相對應(yīng)的節(jié)點中。在合理的添加guest節(jié)點及其子節(jié)點以及文本信息后,XmlDocument對象通過Save()方法將用戶輸入的信息保存到XML文件中。最后,瀏覽器會導向到顯示所有用戶輸入信息的頁面。這樣,該Web頁面運行的效果如圖2所示:
圖2
下面我們來創(chuàng)建用于顯示所有用戶輸入信息的頁面-ViewGuestBook.aspx。在該Web頁面中,我們要運用到XSLT技術(shù),它能將前面創(chuàng)建的XML文件中的數(shù)據(jù)以HTML的形式顯示出來。由于是運用XSLT技術(shù)顯示用戶輸入信息的,所以在設(shè)計該Web頁面時我們無需添加任何Web控件,只要重載該Web頁面的Load()方法即可。
private void Page_Load(object sender, System.EventArgs e)
{
// 創(chuàng)建一個XmlDocument對象以載入存儲信息的XML文件
XmlDocument xdoc = new XmlDocument();
xdoc.Load( Server.MapPath( "guestbook.xml" ));
// 創(chuàng)建一個XslTransform對象并導入XSL文件
XslTransform xslt = new XslTransform();
xslt.Load( Server.MapPath( "guestbook.xsl" ));
string xmlQuery = "http://guestbook";
XmlNodeList nodeList = xdoc.DocumentElement.SelectNodes( xmlQuery );
MemoryStream ms = new MemoryStream();
xslt.Transform( xdoc, null, ms );
ms.Seek( 0, SeekOrigin.Begin );
StreamReader sr = new StreamReader( ms );
// 顯示輸出結(jié)果
Response.Write( sr.ReadToEnd() );
}
該方法首先創(chuàng)建一個XmlDocument對象用于載入前面創(chuàng)建的XML數(shù)據(jù)文件,之后創(chuàng)建一個XslTransform對象并導入相應(yīng)的XSL文件。通過該XSL文件中的內(nèi)容它能將原來的XML文件中的數(shù)據(jù)格式化為HTML的形式并顯示在瀏覽器中。因為其中運用到了XSLT轉(zhuǎn)換,所以我們還得在代碼文件的開頭處添加using System.Xml.Xsl的語句。
下面便是XSL文件的源代碼,其中最重要的部分是<xsl:template match="name">……</xsl:template>一塊。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<table border="1" style="border-collapse: collapse" bordercolor="Teal" align="center" width="505" height="34">
<tr>
<td valign="middle" align="center" bgcolor="Teal" colspan="2" width="505" height="85">
<font style="color:White;background-color:Teal;font-family:華文行楷;font-size:X-Large;font-weight:bold;">歡迎訪問"令狐沖"的留言簿!</font>
</td>
</tr>
<tr><td width="505" height="26" align="left" colspan="2"></td></tr>
<xsl:for-each select="http://guest">
<xsl:apply-templates select="name"/>
</xsl:for-each>
<tr>
<td valign="middle" align="center" colspan="2" width="505">
<font>
本留言簿由<a href="mailto:0024108@fudan.edu.cn">王凱明</a>開發(fā)! </font>
</td>
</tr>
</table>
</xsl:template>
<xsl:template match="name">
<tr>
<td width="95" height="26" align="right">
<font>用戶名:</font>
</td>
<td width="400" height="26" valign="middle" align="left">
<font><xsl:value-of select='.'/></font>
</td>
</tr>
<tr>
<td width="95" height="26" align="right" bgcolor="e0e0e0">
<font>Email地址:</font>
</td>
<td width="400" height="26" valign="middle" align="left" bgcolor="#e0e0e0">
<font><a HREF="mailto:{../email}"><xsl:apply-templates select="../email"/></a></font>
</td>
</tr>
<tr>
<td width="95" height="26" align="right">
<font>QQ號碼:</font>
</td>
<td width="400" height="26" valign="middle" align="left">
<font><xsl:apply-templates select="../qq"/></font>
</td>
</tr>
<tr>
<td width="95" height="26" align="right" bgcolor="#e0e0e0">
<font>個人主頁:</font>
</td>
<td width="400" height="26" valign="middle" align="left" bgcolor="#e0e0e0">
<font><a HREF="http://{../homepage}" target="_blank"><xsl:apply-templates select="../homepage"/></a></font>
</td>
</tr>
<tr>
<td width="95" height="26" valign="top" align="right">
<font>留言信息:</font>
</td>
<td width="400" height="26" valign="top" align="left">
<font><xsl:apply-templates select="../comment"/></font>
</td>
</tr>
<tr><td width="505" height="26" align="left" colspan="2"></td></tr>
</xsl:template>
</xsl:stylesheet>
這樣,當用戶點擊"查看留言簿"按鈕或是成功輸入信息后瀏覽器便導向到該顯示所有用戶輸入信息的Web頁面,其運行效果圖示如下:
圖3
三.總結(jié):
這樣,一個具有基本功能的留言簿就完成了,從中我們可以體會到運用ASP.NET技術(shù)開發(fā)Web應(yīng)用程序是相當容易的,同時在結(jié)合了XML技術(shù)之后,ASP.NET可以變得更加強大。還有文章中介紹的XSLT技術(shù)是非常有用的,你可以參考其它相關(guān)的更多資料以使它成為你開發(fā)過程中的一個有力工具。