viewpost.aspx--察看提交的留言 
viewguestbook.aspx--察看所有留言 
Header.inc 
guestpost.aspx--留言表单及XML写操作 
Footer.inc 
Guest.xml--XML数据 
源代码如下: 
viewguestbook.aspx 
<% Import Namespace="System" %> 
<% Import Namespace="System.IO" %> 
<% Import Namespace="System.Data" %> 
<% Assembly Name="System.Xml" %> 
<% Import Namespace="System.Xml" %> 
<% Page Language="C<%-- Needed Assembiles --%> 
<html> 
<head> 
<title>Welcome to Saurabh's GuestBook.</title> 
<script language="C //run the script when the Page is Loaded 
public void Page_Load(Object sender, EventArgs e) 
{ 
// an label , its use stated later 
tryagain : 
//the path to the Xml file which will contain all the data 
//modify this if you have any other file or directory mappings. 
//modify this if you have been directed here from Step 2 of the ReadMe file. 
string datafile = "db/guest.xml" ; 
//try-Catch block to read from an XML file 
try 
{ 
//make an instance to the XMLDataDocument class 
//this class can read from an xml file in and ordered format 
XmlDataDocument datadoc = new XmlDataDocument(); 
// Infer the DataSet schema from the XML data and load the XML Data 
datadoc.DataSet.ReadXml(new StreamReader(Server.MapPath(datafile))); 
//Databind the first table in the Dataset to the Repeter 
MyDataList.DataSource = datadoc.DataSet.Tables[0].DefaultView; 
MyDataList.DataBind(); 
//free up the XML file to be used by other programs 
datadoc=null; 
} 
catch(IOException ed) 
{ 
// Here I am for now trying to overcome a bug in my guestbook exapmle 
//the Bug is that only one class can either read or write to my XML 
// data file at a time. 
//If the file is being used my some some other page (eg the guest book viewing page) 
// then an IOException will be thrown 
// So to handle such situtations what we do is that 
// If an IOException is thrown the page goes again to the tryagain label 
//and tries to write again into the xml file 
//this goes on till finally the resource is freed and the xml file is written to. 
goto tryagain ; 
} 
catch (Exception edd) 
{ 
//catch any other exceptions that occur 
errmess.Text="Cannot read from XML file because "+edd.ToString() ; 
} 
} 
</script> 
<LINK href="mystyle.css" type=text/css rel=stylesheet> 
</head> 
<body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" rightmargin="0"> 
<!-- <asp:label id="errmess" text=""  
<h3 align="center" class="newsbody">My Guestbook.</h3> 
<ASP:Repeater id="MyDataList" runat="server"> 
<template name="headertemplate"> 
<table class="mainheads" width="100%"  8pt verdana"> 
<tr  <th> 
Name 
</th> 
<th> 
Country 
</th> 
<th> 
Email 
</th> 
<th> 
Comments 
</th> 
<th> 
Date/Time 
</th> 
</tr> 
</template> 
<template name="itemtemplate"> 
<tr  <td> 
<% </td> 
<td> 
<% </td> 
<td> 
<% </td> 
<td> 
<% </td> 
<td> 
<% </td> 
</tr> 
</template> 
<template name="footertemplate"> 
</table> 
</template> 
</ASP:Repeater> 
<!-- </body> 
</html> 
viewpost.aspx 
<% Import Namespace="System" %> 
<% Page Language="C<html> 
<head> 
<title>Welcome to Saurabh's GuestBook.</title> 
<script language="C //execute this script when the page loads 
void Page_Load(Object Src, EventArgs E) 
{ 
//if the page is called from anothe page 
if (!Page.IsPostBack) { 
//get the diffrent Parameters from the querry string and store it 
//to respective Labels 
NameLabel.Text = Request.Params["Name"]; 
CountryLabel.Text= Request.Params["Country"] ; 
EmailLabel.Text=Request.Params["Email"]; 
CommentsLabel.Text=Request.Params["Comments"] ; 
} 
if(Page.IsPostBack) 
{ 
//else display an error 
errmess.Text="This Page Cannot be called directly. It has to be called from the Guestbook posting page." ; 
} 
} 
</script> 
<LINK href="mystyle.css" type=text/css rel=stylesheet> 
</head> 
<body topmargin="0" leftmargin="0" rightmargin="0" marginwidth="0" marginheight="0"> 
<!-- <asp:label id="errmess" text=""  <center> 
<h2 class="newsbody"><b>Thank You , for posting in My GuestBook.</b></h2> 
<table align=center width="60%" border="0" cellspacing="2" cellpadding="1" > 
<tr class="titheading"><td colspan="2">The information You Posted!</td></tr> 
<tr class="newsbody"> 
<td>Name :</td> 
<td><asp:label id="NameLabel" text="" runat="server" /></td> 
</tr> 
<tr class="newsbody"> 
<td>Country :</td> 
<td><asp:label id="CountryLabel" text="" runat="server" /></td> 
</tr> 
<tr class="newsbody"> 
<td>E-mail :</td> 
<td><asp:label id="EmailLabel" text="" runat="server"/></td> 
</tr> 
<tr class="newsbody"> 
<td>Comments :</td> 
<td><asp:label id="CommentsLabel" text="" runat="server" /></td> 
</tr> 
</table> 
 
<h4 class="newsbody"><a href="viewguestbook.aspx">Click here </a> to view GuestBook.</h4>
 
</center> 
<!-- 
</body> 
</html> 
guestpost.aspx 
<% Import Namespace="System" %> 
<% Page Language="C<% Import Namespace="System.IO" %> 
<% Assembly Name="System.Xml" %> 
<% Import Namespace="System.Xml" %> 
<%-- These are the imported assembiles and namespaces need to run the guest book --%> 
<html> 
<head> 
<title>Welcome to Saurabh's GuestBook.</title> 
<script Language="C ///<summary> 
/// This methord is called when the submit button is clicked 
///</summary> 
public void Submit_Click(Object sender, EventArgs e) 
{ 
//A label need to the goto statement explained below 
tryagain : 
//the path to the Xml file which will contain all the data 
//modify this if you have any other file or directory mappings. 
//modify this if you have been directed here from Step 2 of the ReadMe file. 
string datafile = "db/guest.xml" ; 
//put the posting code within a Try-Catch block 
try{ 
//proceed only if all the required feilds are filled-in 
if(Page.IsValid&&Name.Text!=""&&Country.Text!=""&&Email.Text!=""){ 
errmess.Text="" ; 
//make an instance of the class XmlDocument 
XmlDocument xmldocument = new XmlDocument() ; 
//load the xml file you will use as your database. 
//Since we are working on a server we have to use 'Server.MapPath()' 
//to mape the path to the database file 
xmldocument.Load(Server.MapPath(datafile)) ; 
//make an instance of DocumentNavigator class which will help us to 
//navigate in the loaded XML data file. 
DocumentNavigator navigator = new DocumentNavigator(xmldocument) ; 
//below code is very significant as it navigates through the XML document and 
//stores the required values (ps: read this code carefully) 
//first move to the xml documents elements (in my xml file this will come to the 'Guests' Node 
navigator.MoveToDocumentElement() ; 
//then insert First element (FirstChild) which will contain all the information 
// of a single guest posting 
navigator.Insert(TreePosition.FirstChild, XmlNodeType.Element, "Guest","","") ; 
//Insert the Element of Name as the First node of 'Guest' 
navigator.Insert(TreePosition.FirstChild, XmlNodeType.Element, "Name","","") ; 
//This is important to specify what kind of Value will the Name element contain 
navigator.Insert(TreePosition.FirstChild, XmlNodeType.Text,"Name","","") ; 
//assign the Name element the Value from the .Text property of the TextBox 
navigator.Value=Name.Text ; 
//Go back to the Parent Node ie 'Guest' 
navigator.MoveToParent() ; 
//Insert another Element 'Country' After the FirstChild ie. after the 'Name' node. 
navigator.Insert(TreePosition.After, XmlNodeType.Element,"Country","","") ; 
navigator.Insert(TreePosition.FirstChild, XmlNodeType.Text,"Country","","") ; 
navigator.Value=Country.Text ; 
navigator.MoveToParent() ; 
navigator.Insert(TreePosition.After,XmlNodeType.Element,"Email","","") ; 
navigator.Insert(TreePosition.FirstChild, XmlNodeType.Text,"Email","","") ; 
navigator.Value=Email.Text; 
navigator.MoveToParent() ; 
navigator.Insert(TreePosition.After,XmlNodeType.Element,"Comments","","") ; 
navigator.Insert(TreePosition.FirstChild, XmlNodeType.Text,"comments","","") ; 
navigator.Value=Comments.Value ; 
navigator.MoveToParent() ; 
navigator.Insert(TreePosition.After, XmlNodeType.Element,"DateTime","","") ; 
navigator.Insert(TreePosition.FirstChild, XmlNodeType.Text,"DateTime","","") ; 
//set the Date time stamp of the entry 
DateTime now = DateTime.Now ; 
navigator.Value=now.ToShortDateString()+" "+now.ToShortTimeString() ; 
//after making the necessary changes we Save the chenges to the Xml Document 
xmldocument.Save(Server.MapPath(datafile)) ; 
//free up the XML file from the Document file so that other programs can use it 
xmldocument=null ; 
//Build a custom querry sending the data posted to another page for display 
//since it is a querry we have to encode it in UTF8 format 
String QueryString ="Name="+ System.Web.HttpUtility.UrlEncodeToString(Name.Text, System.Text.Encoding.UTF8); 
QueryString +="&&Country="+ System.Web.HttpUtility.UrlEncodeToString(Country.Text, System.Text.Encoding.UTF8); 
QueryString +="&&Email="+ System.Web.HttpUtility.UrlEncodeToString(Email.Text, System.Text.Encoding.UTF8); 
QueryString +="&&Comments="+ System.Web.HttpUtility.UrlEncodeToString(Comments.Value, System.Text.Encoding.UTF8); 
//go to the page viewpost.aspx and append the querry string at its end. 
Page.Navigate("viewPost.aspx?" + QueryString); 
} 
else 
{ 
//if any of the Feilds are kept empty show an error message 
errmess.Text="Fill in all the required feilds of the Guestbook." ; 
} 
} 
catch(IOException ed) 
{ 
// Here I am for now trying to overcome a bug in my guestbook exapmle 
//the Bug is that only one class can either read or write to my XML 
// data file at a time. 
//If the file is being used my some some other page (eg the guest book viewing page) 
// then an IOException will be thrown 
// So to handle such situtations what we do is that 
// If an IOException is thrown the page goes again to the tryagain label 
//and tries to write again into the xml file 
//this goes on till finally the resource is freed and the xml file is written to. 
goto tryagain ; 
} 
catch (Exception edd) 
{ 
//catch any other exception that occur 
errmess.Text="Cannot write to XML file because "+edd.ToString() ; 
} 
} 
</script> 
<LINK href="mystyle.css" type=text/css rel=stylesheet> 
</head> 
<body topmargin="0" leftmargin="0" rightmargin="0" marginwidth="0" marginheight="0"> 
<%-- Include a header file 'header.inc' --%> 
<!-- 
 
<h3 align="center" class="newsbody">Guestbook Post Page.</h3> 
 
<asp:label id="errmess" text=""  <form runat="server"> 
<table border="0" width="80%" align="Center"> 
<tr > 
<td class="newsheading"><b>Sign-in My GuestBook</b></td> 
<td class="newsheading"> </td> 
</tr> 
<tr class="newsbody" > 
<td>Name :</td> 
<td ><asp:textbox text="" id="Name" runat="server" />   <font color= 
</tr> 
<tr class="newsbody"> 
<td>Country :</td> 
<td><asp:textbox text="" id="Country" runat="server"/>   <font color= 
</tr> 
<tr class="newsbody"> 
<td>E-Mail :</td> 
<td><asp:textbox test="" id="Email" runat="server"/>   <font color= 
</tr> 
<tr class="newsbody"> 
<td>Comments :</td> 
<td><textarea id="Comments" cols="25" rows="4" runat="server" /></td> 
</tr> 
<tr class="newsbody"> 
<td colspan="2" > 
<asp:Button class="newsheading" id="write" Text="Submit"  runat="server"/></td> 
</tr> 
</table> 
</form> 
 
<h4 class="newsbody"><a href="viewguestbook.aspx">Click here </a> to view GuestBook.</h4>
 
<!-- </body> 
</html> 
			
一个ASP.NET+XML留言本例子
                    80酷酷网    80kuku.com 
       
  
 
 
  
