這個星期,我們將使用可擴充標記語言(xml)以及在asp中使用ActiveX Data Object(ADO).在最新的互聯網信息服務器(IIS 5)和ADO(2.6)版本中,我們現在能夠從游標對象中提取數據作為XML直接保存並直接發給ASP的response對象
。
下面的Phonelist.ASP工程從創建一個底層的Access數據庫開始.我的想法是開發一個對任何公司都有用的簡單的數據集.第一步是命名表單contacts然後增加四個域:FirstName,LastName, Location, 和Phone.你要明白XML和可擴充風格頁語言(XSL)是大小些敏感的,因此你要確保你的數據域名和XSL風格頁中的那些定義相匹配.
本工程中的ASP只有一個簡單的功能:提取數據並將它作為XML返回.首先,我們需要將文件內容類型標示為text/xml.然後,添加XML信息頭和風格頁連接信息來格式化XML數據.第三步,創建一個ADO游標對象來提取數據.這裡你可以體會到XML技術的簡單性是如此的精巧.我們不需要循環遍歷整個游標對象也不需要將Html和腳本代碼混合來在ASP裡格式化和顯示數據,我們只需要簡單的打開游標然後將數據作為XML保存到response對象裡.
開發者能夠容易的用XSL格式化和顯示數據的確是令人神往的.你的開發過程越簡單,問題存在的可能性就越小.
更多的信息和ADO MDAC 2.6版的下載鏈接可以在下面的站點找到:Microsoft Universal Access Data Web site.
下面是Phonelist.ASP程序的代碼.
<%@ Language=VBScript %>
<%
Response.ContentType = "text/XML"
Response.Write "<?XML version=""1.0"" ?>" & vbcrlf
Response.Write "<?XML-stylesheet type=""text/xsl"" " & _
"href=""PhoneList.XSL"" ?>" & vbcrlf & vbcrlf
set rsContacts = Server.CreateObject("ADODB.Recordset")
dataConnStr = "PRovider=Microsoft.Jet.OLEDB.4.0;" & _
"User ID=Admin;Data Source=D:\Inetpub\wwwroot\ASP_Utils\PhoneList.mdb;" & _
"Mode=Share Deny None;Extended PropertIEs="""";" & _
"Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";" & _
"Jet OLEDB:Database PassWord="""";Jet OLEDB:Engine Type=5;" & _
"Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;" & _
"Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database PassWord="""";" & _
"Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;" & _
"Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:" & _
"Compact Without Replica Repair=False;Jet OLEDB:SFP=False;User Id=Admin;"
sql = "SELECT LastName + ', ' + FirstName AS Name, " & _
"Phone, Location FROM Contacts ORDER BY LastName"
rsContacts.ActiveConnection = dataConnStr
rsContacts.Source = sql
rsContacts.CursorLocation = 3'Use ClIEnt side cursor
rsContacts.Open
rsContacts.ActiveConnection = nothing
rsContacts.Save response, 1 'adPersistXML
Set rsContacts = Nothing
%>
The Phonelist.xsl file source:
<Html XMLns:xsl="http://www.w3.org/TR/WD-xsl">
<TITLE>Company Phone List</TITLE>
<STYLE>
.Table {background:black}
.TableHead {font:bold; color:white; background:blue}
.ColumnHeader {font:normal 'Verdana' bold; color:white; background:blue}
.TableRow {font:x-small 'Verdana'; color:black; background:#CCCCCC}
</STYLE>
<BODY>
<DIV >
<TABLE CLASS="Table" ID="RecordTable">
<THEAD>
<TR CLASS="TableHead">
<TH CLASS="ColumnHeader">Name</TH>
<TH CLASS="ColumnHeader">Location</TH>
<TH CLASS="ColumnHeader">Phone</TH>
</TR>
</THEAD>
<xsl:for-each select="XML/rs:data/z:row">
<TR CLASS="TableRow">
<TD><xsl:value-of select="@Name" /></TD>
TD align="center"><xsl:value-of select="@Location" /></TD>
<TD><xsl:value-of select="@Phone" /></TD>
</TR>
</xsl:for-each>
</TABLE>
</DIV>
</BODY>
</Html>