作為一個普通的程序員我深知一個優秀的例程對於正在學習編程的人是多麼的有幫助本文中使用的例程是一個聯系信息管理程序我也是寫來以方便自己和朋友們互相聯系用的但麻雀雖小五髒俱全相信對正在學習ASP+XML編程的朋友們還是具備一定的參考價值的
讀者可以通過此實例了解在ASP(Active Server Page)中如何操縱XML文件並進行數據的各種處理包括XML節點的建立修改刪除和保存等等文中涉及到的技術包括ASPVBScriptDOMXML和XSL等
本文未對使用到的技術進行深入的理論介紹因此讀者需要具備一定的相關知識尤其是對ASPXML和DOM應該有一定的了解通讀本文並參考源代碼相信讀者一定可以熟練地掌握XML編程
一程序說明
例程基於B/S結構使用XML文件存儲聯系信息然後通過一個VBScript寫的Class使用DOM對XML文件中的聯系信息進行各種操作
例程提供的代碼采用了統一的命名規范主要包括用三個字母的縮寫說明變量類型如數字類型——int字符串類型——str對象——obj等等雖然在ASP/VBScript中不區分數據類型但使用明顯的數據類型說明對程序的編寫和維護還是很有意義的使用有意義的變量名稱如XMLDocument對象定義為objXmlDoc等等同樣這樣做的也是為了更好地編寫和維護程序
此程序可以分為後台數據處理和前台界面表現兩部分
程序後台使用VBScript編寫了一個Class這是在VBScript版中提供的新特性雖然這裡Class的概念和真正的面向對象相去甚遠但是在ASP中合理地使用Class還是可以在一定程度上提高程序的運行效率和可維護性
前台表現使用XSL對XML文件中的數據進行了格式化然後以HTML的形式輸出到客戶端充分體現了XML技術帶來的靈活性與可定制性格式化的過程放在了服務器端使用ASP程序完成這樣客戶端得到的是經過格式化之後的HTML信息避免了兼容性問題的出現
當然程序對於具體的操作細節未作非常嚴格的檢驗比如聯系信息必填項的檢查但是對於在ASP中使用DOM操作XML的有關部分程序提供了完整的示例代碼
二XML文件說明(personsxml)
例程中使用到的XML文件結構十分簡單並且沒有定義相關的Schema或者DTD因為對於此程序這是不必要的當然如果讀者願意自己定義一個的話也不會對程序的運行產生影響
程序的數據結構定義如下Persons集合它包含多個Person對象每一個Person對象包括姓名Name英文名Nick手機Mobile電話Tel電子郵件Email騰訊QQ和所在公司Company的屬性將以上定義對應到XML文件即Persons為根節點Person為Persons的子節點NameNickMobileTelEmailQQ和Company為Person的子節點
這樣我們得到的XML文件內容如下:
<?xml version= encoding=gb?>
<Persons>
<Person>
<Name>小東</Name>
<Nick>gwd</Nick>
<Mobile>XXXXXXXX</Mobile>
<Tel>XXXXXXXX</Tel>
<Email></Email>
<QQ></QQ>
<Company>XXX</Company>
<Person>
</Person>
讀者需要注意<?xml version= encoding=gb?>這一行XML默認不支持中文通過設置encoding屬性才可以使XML正確地顯示中文讀者可以在IE及以上版本的浏覽器中訪問此文件它會以 樹型結構把數據顯示出來
三格式轉換XSL文件說明(Personsxsl)
例程中使用XSL對XMl數據進行格式化並以HTML的形式返回到客戶端這個過程也可以放在客戶端進行但考慮到兼容性的問題例程中采用了在服務器端通過ASP操縱DOM進行格式化的方法
XSL文件的內容如下
<?xml version= encoding=gb?>
<xsl:stylesheet xmlns:xsl= rsion=>
<xsl:template match=/Persons>
<script language=javascript>
function add()
{
windowopen(addasp add width=height=resize=no);
}
function edit(intId)
{
windowopen(editasp?id=+intId edit width=height=resize=no);
}
</script>
<table width= border= align=center>
<tr>
<td align=right><a javascript:add(); title=添加新聯系人>添加新聯系人</a> </td>
</tr>
</table>
<table align=center width= cellspacing= cellpadding= border= bgcolor=#>
<tr class=title bgcolor=#EEE>
<td width=><xsl:text disableoutputescaping=yes>&</xsl:text>nbsp;</td>
<td>姓名</td>
<td>英文名</td>
<td>手機</td>
<td>電話</td>
<td>Email</td>
<td>QQ</td>
<td>所在公司</td>
</tr>
<xsl:foreach select=Person>
<TR BGCOLOR=#FFFFFF>
<TD ALIGN=right><xsl:valueof select=position()/></TD>
<TD STYLE=color:#><A><xsl:attribute name=HREF>javascript:edit(<xsl:valueof select=position()/>);</xsl:attribute><xsl:attribute name=title>修改信息
</xsl:attribute><xsl:valueof select=Name/></A></TD>
<TD><xsl:valueof select=Nick/></TD>
<TD><xsl:valueof select=Mobile/></TD>
<TD><xsl:valueof select=Tel/></TD>
<TD><A><xsl:attribute name=HREF>mailto:<xsl:valueof select=Email/></xsl:attribute><xsl:valueof select=Email/></A></TD>
<TD><xsl:valueof select=QQ/></TD>
<TD><xsl:valueof select=Company/></TD>
</TR>
</xsl:foreach>
</table>
</xsl:template>
</xsl:stylesheet>
在服務器端的轉換使用一個函數來完成格式化成功返回HTML字符串格式化失敗打印出錯誤信息如下
*******************************************
說明使用XSL文件格式化XML文件
作者gwd
參數strXmlFile Xml文件路徑+文件名
strXslFile Xsl文件路徑+文件名
返回成功 格式化後的HTML字符串
失敗 自定義的錯誤信息
*******************************************
Function FormatXml(strXmlFile strXslFile)
Dim objXml objXsl
strXmlFile = ServerMapPath(strXmlFile)
strXslFile = ServerMapPath(strXslFile)
Set objXml = ServerCreateObject(MSXMLDOMDocument)
Set objXsl = ServerCreateObject(MSXMLDOMDocument)
objXMLAsync = False
If objXmlLoad(strXmlFile) Then
objXslAsync = False
objXslValidateonParse = False
If objXslLoad(strXslFile) Then
On Error Resume Next 捕獲transformNode方法的錯誤
FormatXml = objXmltransformNode(objXsl)
If objXslparseErrorerrorCode <> Then
ResponseWrite
<hr>
ResponseWrite Error Code: & objXslparseErrorerrorCode
ResponseWrite
Error Reason: & objXslparseErrorreason
ResponseWrite
Error Line: & objXslparseErrorline
FormatXml = <span class=alert>格式化XML文件錯誤!</span>
End If
Else
ResponseWrite
<hr>
ResponseWrite Error Code: & objXslparseErrorerrorCode
ResponseWrite
Error Reason: & objXslparseErrorreason
ResponseWrite
Error Line: & objXslparseErrorline
FormatXml = <span class=alert>裝載XSL文件錯誤!</span>
End If
Else
ResponseWrite
<hr>
ResponseWrite Error Code: & objXmlparseErrorerrorCode
ResponseWrite
Error Reason: & objXmlparseErrorreason
ResponseWrite
Error Line: & objXmlparseErrorline
FormatXml = <span class=alert>裝載XML文件錯誤!</span>
End If
Set objXsl = Nothing
Set objXml = Nothing
End Function
四操作Xml數據的Cls_Person類說明(clsPersonasp)
Cls_Person類用來完成與聯系人信息相關的各種操作包括添加修改和刪除等等它使用VBScript編寫Cls_Person包括IdNameNickMobileTelEmailQQ和Company屬性對應於XML文件中的Person節點Cls_Person包括GetInfoFromXmlAddToXmlEditToXml和DeleteFormXml四個主要方法分別完成獲取信正文
From:http://tw.wingwit.com/Article/program/net/201311/13737.html