ASP.Net+XML打造留言薄

來源:互聯網
上載者:User
asp.net|xml 一.概述:

  留言簿是網站的一個重要組成部分,是訪問者發表意見的場所,也是網站管理員瞭解網站基本運行情況的有力工具,所以留言簿在現在的網站中扮演了十分重要的角色。

  不過在以前開發一個留言簿並不是一件容易的事,開發人員的工作量往往會很大。而現在隨著微軟推出VS.NET,相應的技術也推陳出新。特別是XML技術在.NET Framework中的廣泛運用,使得整個.NET構架具有十分優越的基礎。而ASP.NET中推出的嶄新的編程模型更使得開發Web應用程式變得非常容易。本文就結合ASP.NET技術和XML技術的優點向大家介紹如何打造一個屬於自己的留言簿。

  二.實現方法:

  一個基本的留言簿應至少包括兩個功能:接受使用者輸入的資訊並儲存該資訊到後台資料庫;顯示使用者輸入的資訊。使用者輸入的資訊一般包括使用者名稱、Email地址、QQ號碼、使用者首頁、留言資訊等,這些資訊通常是儲存在後台資料庫的某個表中的,不過本文要運用一個XML檔案來儲存這些資訊。顯示使用者輸入的資訊時一般得把所有的資訊都顯示出來,這裡的方法就是從XML檔案中讀取資料並運用XSLT技術對其進行格式轉換,最後以HTML的形式顯示在瀏覽器中。

  這樣,我們的留言簿就需要兩個Web頁面,一個用於接受使用者的輸入資訊,另一個用於顯示使用者已經輸入過的資訊。而儲存資訊的XML檔案(guestbook.xml)則需具有如下的結構:

<?xml version="1.0" encoding="GB2312"?>
<guestbook>
<guest>
<name>令狐沖</name>
<email>doose@etang.com</email>
<qq>10102350</qq>
<homepage>www.doose.com</homepage>
<comment>本留言簿由"令狐沖"建立,希望你能喜歡哦:)要知道如何建立一個屬於自己的留言簿,那麼就請仔細閱讀《運用ASP.NET和XML技術打造留言簿》一文!</comment>
</guest>
</guestbook>

  下面我們先來建立用於接受使用者輸入資訊的Web頁面-GuestBook.aspx。根據前面所提的基本要求,該Web頁麵包括了以下幾個部分:留言簿標題、"使用者名稱:"標籤及輸入框、"Email地址:"標籤及輸入框、"QQ號碼:"標籤及輸入框、"個人首頁:"標籤及輸入框、"留言資訊:"標籤及輸入框、一個"確定"按鈕、一個"重設"按鈕、一個"查看留言簿"按鈕,同時該頁面還包括了兩個驗證按鈕,分別用於驗證使用者名稱以及Email地址是否為空白,若為空白,則提醒使用者輸入。同時,為使留言簿具有良好的使用者介面,我運用了表格進行頁面布置,這樣留言簿中的各個成分就能有條有理,層次分明了。有關該Web頁面的詳細代碼請參考文後附帶的原始碼,這裡就不給出了。頁面布置的圖示如下:


圖1

  完成了該Web頁面的布置,我們僅僅是完成了一部分的工作,到此為止我們並沒有進行過真正的編碼。我想大家對ASP.NET中的代碼後置技術肯定是瞭解或熟悉的,它將Web頁面的布置工作和後端的編碼工作區分開來,達到了良好的分離效果。下面我們就為該Web頁面中的三個按鈕分別編寫訊息相應函數:

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檔案中,調用的方法就是SaveXMLData();而第二個按鈕僅僅完成文字框的重設清空工作;第三個按鈕的作用是運用另一個Web頁面顯示所有的使用者輸入資訊。同時,第一個按鈕在成功儲存資訊後也會將瀏覽器導向到顯示所有使用者輸入資訊的頁面。
  下面我們來詳細分析一下SaveXMLData()方法,其實現如下:

private void SaveXMLData()
{
try
{
// 建立一個XmlDocument對象,用於載入儲存資訊的XML檔案
XmlDocument xdoc = new XmlDocument();
xdoc.Load( Server.MapPath( "guestbook.xml" ));

// 建立一個新的guest節點並將它添加到根節點下
XmlElement parentNode = xdoc.CreateElement( "guest" );
xdoc.DocumentElement.PrependChild( parentNode );

// 建立所有用於儲存資訊的節點
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 );

// 將上面建立的各個儲存資訊的節點添加到guest節點下但並不包含最終的值
parentNode.AppendChild( nameNode );
parentNode.AppendChild( emailNode );
parentNode.AppendChild( qqNode );
parentNode.AppendChild( homepageNode );
parentNode.AppendChild( commentNode );

// 將上面擷取的文本資訊添加到與之相對應的節點中
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部分首先通過建立一個XmlDocument對象來載入XML檔案,然後建立根節點的兒子-guest節點並在guest節點下添加儲存資訊所必須的五個子節點。所有這些子節點都是XmlElement對象,它們是通過XmlDocument對象的CreateElement()方法來擷取的。同時,XmlDocument對象還通過CreateTextNode()方法來擷取文本資訊並在後面將其添加到相對應的節點中。在合理的添加guest節點及其子節點以及文本資訊後,XmlDocument對象通過Save()方法將使用者輸入的資訊儲存到XML檔案中。最後,瀏覽器會導向到顯示所有使用者輸入資訊的頁面。這樣,該Web頁面啟動並執行效果如圖2所示:


圖2

  下面我們來建立用於顯示所有使用者輸入資訊的頁面-ViewGuestBook.aspx。在該Web頁面中,我們要運用到XSLT技術,它能將前面建立的XML檔案中的資料以HTML的形式顯示出來。由於是運用XSLT技術顯示使用者輸入資訊的,所以在設計該Web頁面時我們無需添加任何Web控制項,只要重載該Web頁面的Load()方法即可。

private void Page_Load(object sender, System.EventArgs e)
{
// 建立一個XmlDocument對象以載入儲存資訊的XML檔案
XmlDocument xdoc = new XmlDocument();
xdoc.Load( Server.MapPath( "guestbook.xml" ));

// 建立一個XslTransform對象並匯入XSL檔案
XslTransform xslt = new XslTransform();
xslt.Load( Server.MapPath( "guestbook.xsl" ));

string xmlQuery = "//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 );

// 顯示輸出結果
Response.Write( sr.ReadToEnd() );
}

  該方法首先建立一個XmlDocument對象用於載入前面建立的XML資料檔案,之後建立一個XslTransform對象並匯入相應的XSL檔案。通過該XSL檔案中的內容它能將原來的XML檔案中的資料格式化為HTML的形式並顯示在瀏覽器中。因為其中運用到了XSLT轉換,所以我們還得在代碼檔案的開頭處添加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="//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>開發! </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

  三.總結:

  這樣,一個具有準系統的留言簿就完成了,從中我們可以體會到運用ASP.NET技術開發Web應用程式是相當容易的,同時在結合了XML技術之後,ASP.NET可以變得更加強大。還有文章中介紹的XSLT技術是非常有用的,你可以參考其它相關的更多資料以使它成為你開發過程中的一個有力工具。




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.