end if
StarNodes=PageNo*PageSize-1'獲得起始節點
EndNodes=(PageNo-1)*PageSize'獲得結束節點
if EndNodes<0 then
EndNodes=0
end if
if StarNodes>AllNodesNum then'判斷起始節點數是否超過總的節點數
EndNodes=EndNodes-(StarNodes-AllNodesNum)
'如果超過則結束節點要減去(StarNodes-AllNodesNum)的差值否則下標會超界出錯
StarNodes=AllNodesNum
end if
if EndNodes<0 then
EndNodes=0
end if
while StarNodes>=EndNodes
'從結束節點到超始節點之間讀取節點資料
username = objRootsite.childNodes.item(StarNodes).childNodes.item(1).text
'獲得使用者名稱
fromwhere = objRootsite.childNodes.item(StarNodes).childNodes.item(2).text
'獲得使用者來自那裡
Posttime = objRootsite.childNodes.item(StarNodes).childNodes.item(3).text
'獲得留言時間
homepage = objRootsite.childNodes.item(StarNodes).childNodes.item(4).text
'獲得使用者首頁
email = objRootsite.childNodes.item(StarNodes).childNodes.item(5).text
'獲得使用者Eamil
text = objRootsite.childNodes.item(StarNodes).childNodes.item(6).text
'獲昨留言內容
'*****************************************************************************
'這裡使作了XML的DOM來讀取資料,顯然objRootsite對像所對應的節點為<NewList>
' objRootsite.childNodes.item(StarNodes)所對應的節點就是<list>節點因為不至一個<list>節點所以用了item()來識別當前節點資料,隨著StarNodes的遞減<list>節點根著往上移一個個讀取<list>節點資料。
'objRootsite.childNodes.item(StarNodes).childNodes.item(1).text所對應的節點為具體的每個節點的文本值,這裡(1)所對應的就是username使用者名稱(因為<list>節點的子節點才是我們真正所要的)
'******************************************************************************
text = replace(text,chr(13),"<br>")
'替代斷行符號
text = replace(text,chr(32)," ")
'替代空格
%>
<tr bgcolor="#F0F0F0">
<td width="21%" height="94" valign="top">姓 名:<%=username%><br>
來 自:<%=fromwhere%><br>
</td>
<td width="79%" height="94" valign="top"> | <a href="<%=homepage%>" target=_blank title="<%=username%
>的首頁">首頁</a>
| | <a href="mailto:<%=email%>" title="給<%=username%>寫信">信箱</a> | |<font color="#CC6633">
留言時間:<%=Posttime%> </font>|
<hr>
<%=text%> </td>
</tr>
<tr bgcolor="#FFFFFF" align="right">
<td colspan="2"> </td>
</tr>
<%
StarNodes=StarNodes-1
wend
set objXML=nothing
%>
<tr bgcolor="#FFFFFF" align="right">
<td colspan="2"> 共有<<%=PageNum%>>頁
<%
if cint(PageNo)<>PageNum then'分頁
response.write "<a href='index.asp?PageNo="&(PageNo+1)&"'>上一頁</a>"
end if
if cint(PageNo)<>1 then
response.write "<a href='index.asp?PageNo="&(PageNo-1)&"'>下一頁</a> "
end if
%>
</td>
</tr>
</table>
</body>
</html>
六、建立寫新留言程式(PostNew.asp)
這個檔案要實現的功能就是寫入新的XML節點,首先建立一個XML對像然後把XML讀入記憶體中,利用appendChild()方法加入我們產生的XML節點。
<%
username=request.form("username")
if username<>"" then
fromwhere =request.form("fromwhere")
homepage =request.form("homepage")
email =request.form("email")
text =request.form("text")
text =replace(text,"<","<")
Posttime =now()
strSourceFile = Server.MapPath("/") & "\List.xml"
'擷取XML檔案的路徑這雷根據你的虛擬目錄不同而不同
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
'建立XML對像
objXML.load(strSourceFile)
'把XML檔案讀入記憶體中
Set objRootlist = objXML.documentElement.selectSingleNode("NewList")
'選取<NewList>節點
if objRootlist.hasChildNodes then
'判斷<NewList>是否有子節點(因為如果是每一次<NewList>是沒有子節點的,
’ 如果不加判斷在第一次運得時就會報錯
id = objRootlist.lastchild.firstchild.text+1
'這裡獲得將要插入子節點的ID號,其ID號為<NewList>的最後一個子節點(lastchild)的第一個子節點(firstchild)的ID號加1(這裡我們按照關係型資料庫的ID號來遞增)
else
'如是沒有字子節點則是第一次留言ID號設為1
id=1
end if
brstr=chr(13)&chr(10)&chr(9)
'為了插入XML檔案中的節點換行空格排列整齊
’(當然你也可以不用這樣只是為了XML資料好看而以)
XMLnode=brstr&"<list>"&brstr & _
"<id>"&id&"</id>"&brstr & _
"<username>"&username&"</username>"&brstr & _
"<fromwhere>"&fromwhere&"</fromwhere>"&brstr & _
"<Posttime>"&Posttime&"</Posttime>"&brstr & _
"<homepage>"&homepage&"</homepage>"&brstr & _
"<email>"&email&"</email>"&brstr & _
"<text>"&text&"</text>"&brstr & _
"</list>"&chr(13)
'根據得到的資料建立XML片段
set objXML2=Server.CreateObject("Microsoft.XMLDOM")
'建立一個新XML對像
objXML2.loadXML(XMLnode)
'把XML版片段讀入記憶體中
set rootNewNode=objXML2.documentElement
'獲得objXML2的根節點
objRootlist.appendChild(rootNewNode)
'把XML片段插入到List.xml中
objXML.save(strSourceFile)
'儲存lsit.xml檔案(因為不儲存List.xml只在記憶體中更新了)
set objXML=nothing
set objXML2=nothing
response.write "謝謝您的留言"
response.end
end if
%>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
td { font-size: 9pt}
-->
</style>
</head>
<body bgcolor="#0099CC" text="#000000">
<table width="80%" border="0" cellspacing="1" cellpadding="4" align="center" bgcolor="#FFFFFF">
<form action="PostNew.asp" method="post" name="form1">
<tr bgcolor="#000000">
<td colspan="2"><font color="#FFFFFF">新留言</font></td>
</tr>
<tr bgcolor="#EFEFEF">
<td width="19%" align="right">姓 名:</td>
<td width="81%">
<input type="text" name="username">
** </td>
</tr>
<tr bgcolor="#EFEFEF">
<td width="19%" align="right">來 自:</td>
<td width="81%">
<input type="text" name="fromwhere" value="中國">
</td>
</tr>
<tr bgcolor="#EFEFEF">
<td width="19%" align="right">主 頁:</td>
<td width="81%">
<input type="text" name="homepage" value="http://">
</td>
</tr>
<tr bgcolor="#EFEFEF">
<td width="19%" align="right">Email:</td>
<td width="81%">
<input type="text" name="email">
</td>
</tr>
<tr bgcolor="#EFEFEF">
<td width="19%" align="right" valign="top">內 容:</td>
<td width="81%">
<textarea name="text" cols="60" rows="10"></textarea>
</td>
</tr>
<tr bgcolor="#EFEFEF">
<td width="19%" align="right"> </td>
<td width="81%">
<input type="submit" name="Submit" value="提交">
<input type="reset" name="Submit2" value="重填">
</td>
</tr>
</form>
</table>
</body>
</html>
七、總結
到這裡我們就建立一個簡單並有分頁功能的XML留言本了,呵看完了簡單吧,其實我這裡只起一個拋磚引玉的功能,其目的是引導大家建立更複雜更好的ASP+XML程式,例如:所上面的留言本加上回複功能,管理功能,點擊計資料功能等,甚至你可以把它變一個BBS等等。最後留言本運行結果如下:
(List.xml在IE5下面的運行結果)
(留言本index.asp運行結果)
(PostNew.asp運得結果)
最後如果你拷貝我上面的程式的不能運行,可是是拷貝時或者是我注釋時出錯了(不過首頁要檢查 strSourceFile = Server.MapPath("/") & "\List.xml"這裡是否出錯了,不過我可以告訴你如果是提示缺少對像那麼多是這裡出錯了),最後你可以到http://Page2000.xiloo.com去下載來源程式,也可以給我來信asp_boys@cmmail.com我會儘快給你寄去來源程式。如果你有什麼問題可以到http://www.4u2v.com/bbs因為我多在那裡回答一些我知道的問題。