筆者為微軟台北廳、TechNet等研討會講師,和微軟之友、RUN!PC雜誌專欄作者,著作有「IIS 5.0超級網站速成班」(新書)、「ASP網站熱門應用技術」、「微軟熱門Web技術速成班」等網站網頁設計十幾本電腦書籍。現任「喬篷科技」公司總經理,從事WebFlow、網站熱門應用精選等Web資料庫應用設計等服務。
IIS示範網站:www.asp.com.tw
連絡E-mail:
[email protected]。
本文介紹IIS 5.0與XML,包括ADO如何支援XML、ADO如何支援XML、IE 5.0如何支援XML等功能。
其中ADO如何支援XML單元,將介紹Recordset儲存成XML檔案、Recordset以XML格式輸出到瀏覽器、Recordset以XML格式儲存於記憶體、記憶體XML格式資料轉到Recordset,為本文精彩的部份。
XML(eXtensible Markup Language)支援
XML(eXtensible Markup Language)將成為資料交換的標準。
IIS 5.0於XML(eXtensible Markup Language)支援方面,包含:
1. ADO支援XML,可以直接將recordset的資料,以XML格式儲存成一個XML檔案或輸出(Response)到瀏覽器;或將recordset的資料以XML格式儲存於記憶體中(使用STREAM物件)。
2. XML Parser(XMLDOM)以解析XML檔案,可於IE(client)與 ASP(server)上使用。
3. IE 5.0支援XML,包括IE 5.0 XML Data Islands和Databinding,以及XSL(eXtensible Stylesheet Language)Stylesheets。
ADO如何支援XML呢?
Windows 2000 Server之IIS 5.0包括ADO 2.5版,IIS 4.0可使用ADO 2.1版。
ADO 2.5對於XML新提供的功能:
1. 直接將recordset的資料,以XML格式輸出(Response)到瀏覽器,使用RS.Save Response, adPersistXML指令。
2. 新增加STREAM物件,於記憶體儲存XML格式的資料,將ADO之Recordset資料儲存成XML格式,暫時放置於記憶體當中,提供recordset與記憶體XML格式資料之間的交換功能。
ADO支援XML,可以直接將recordset的資料,以XML格式儲存成一個XML檔案或輸出(Response)到瀏覽器;或將recordset的資料以XML格式儲存於記憶體中(使用STREAM物件)。包括:
1. Recordset儲存成XML檔案:ADO 2.1版,直接將recordset的資料,以XML格式儲存成一個XML檔案,使用RS.Save “xxx.xml", adPersistXML指令。
2. Recordset以XML格式輸出到瀏覽器:ADO 2.5版,直接將recordset的資料,以XML格式輸出(Response)到瀏覽器,使用RS.Save Response, adPersistXML指令。
3. Recordset以XML格式儲存於記憶體:ADO 2.5版,將recordset的資料以XML格式儲存於記憶體(使用STREAM物件)中,使用RS.Save ST, adPersistXML指令。
4. 記憶體XML格式資料轉到Recordset:ADO 2.5版,將儲存於記憶體(使用STREAM物件)中XML格式資料轉到recordset中,使用RS.Open ST指令。
STREAM物件
STREAM物件,用於儲存XML格式資料於記憶體中,可使用以下方法:
l rs.Save st, adPersistXML:將recordset的資料以XML格式使用STREAM物件儲存於記憶體中。
l Response.Write st.ReadText:將STREAM物件儲存於記憶體中之XML資料輸出(Response)到瀏覽器中。
l st.Open:開啟STREAM物件。
l st.WriteText objTextStream.ReadAll():將文字字串儲存於STREAM物件記憶體中。
l st.Position = 0:將指標指到STREAM物件記憶體起點。
l rs.Open st:將儲存於STREAM物件記憶體中XML格式資料轉到recordset中。
Recordset儲存成XML檔案
於IIS 4.0之ADO 2.1版(當然可用於IIS 5.0之ADO 2.5版),使用RS.Save “xxx.xml", adPersistXML指令,即可直接將recordset的資料,以XML格式儲存成一個XML檔案。
譬如asp程式碼如下:
<%
Set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("test.mdb")& ";Driver={Microsoft Access Driver(*.mdb)};"
set RS = Server.CreateObject( "ADODB.Recordset" )
RS.Open "select * from PRODUCT", conn1
RS.Save Server.MapPath("test1.xml"), 1 'adPersistXML
rs.close
conn1.close
Response.Redirect "test1.xml"
%>
將test.mdb中PRODUCT資料表的資料先開啟於recordset RS中,再使用RS.Save “test1.xml", adPersistXML指令,以XML格式儲存成一個XML檔案test1.xml,最後重新導向到此新產生的XML檔案。
於瀏覽器執行結果如下,顯示此新產生的XML檔案。
又譬如asp程式碼如下:
<%
Set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("test.mdb")& ";Driver={Microsoft Access Driver(*.mdb)};"
set RS = Server.CreateObject( "ADODB.Recordset" )
RS.Open "select * from PRODUCT", conn1
strFilename = Server.MapPath("test1.xml")
RS.Save strFilename, 1 'adPersistXML
set objFS = Server.CreateObject("Scripting.FileSystemObject")
set objTextStream = objFS.OpenTextFile(strFilename, 1)
Response.Write objTextStream.ReadAll()
objTextStream.Close()
rs.close
conn1.close
%>
使用Scripting.FileSystemObject,讀取所新產生的XML檔案,於瀏覽器執行結果同上例。
Recordset以XML格式輸出到瀏覽器
於IIS 5.0之ADO 2.5版,使用RS.Save Response, adPersistXML指令,即可直接將recordset的資料,以XML格式輸出(Response)到瀏覽器。
譬如asp程式碼如下:
<%
Response.ContentType = "text/xml"
Response.Expires = 0
%>
<?xml version="1.0" encoding="BIG5" standalone="yes" ?>
<%
Set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("test.mdb")& ";Driver={Microsoft Access Driver(*.mdb)};"
set objRS = Server.CreateObject( "ADODB.Recordset" )
objRS.Open "select * from PRODUCT", conn1
if Request.ServerVariables("SERVER_SOFTWARE")= "Microsoft-IIS/5.0" then
objRS.Save Response, 1 'adPersistXML
else
dim objFS, strFilename, strTempFolder, objTextStream
set objFS = Server.CreateObject( "Scripting.FileSystemObject" )
strTempFolder = objFS.GetSpecialFolder( TemporaryFolder )+ "\"
strFilename = objFS.GetTempName()
objRS.Save strTempFolder + strFilename, 1 'adPersistXML
set objTextStream = objFS.OpenTextFile(strTempFolder + strFilename, 1)
Response.Write objTextStream.ReadAll()
objTextStream.Close()
objFS.DeleteFile strTempFolder + strFilename, False
end if
%>
將test.mdb中PRODUCT資料表的資料先開啟於recordset RS中,再使用RS.Save Response, adPersistXML指令,直接將recordset的資料,以XML格式輸出(Response)到瀏覽器。
其中使用Request.ServerVariables("SERVER_SOFTWARE")判斷是否使用IIS 5.0("Microsoft-IIS/5.0"),若是則使用RS.Save Response, adPersistXML指令;若不是,則使用objRS.Save “XXX.XML”, adPersistXML先儲存到暫時的XML檔案,再使用objTextStream.ReadAll()讀取XML檔案所有資料使用Response.Write顯示出來。
於瀏覽器執行xmlado3.asp結果如下,顯示輸出(Response)到瀏覽器之畫面。
Recordset以XML格式儲存於記憶體
於IIS 5.0之ADO 2.5版,使用RS.Save ST, adPersistXML指令,即可將recordset的資料以XML格式儲存於記憶體(使用STREAM物件)中。
譬如asp程式碼如下:
<%
Response.ContentType = "text/xml"
Response.Expires = 0
%>
<?xml version="1.0" encoding="BIG5" standalone="yes" ?>
<%
Set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("test.mdb")& ";Driver={Microsoft Access Driver(*.mdb)};"
set rs = Server.CreateObject( "ADODB.Recordset" )
rs.Open "select * from PRODUCT", conn1
' ADOToXML
set st = Server.CreateObject( "ADODB.Stream" )
rs.Save st, 1 'adPersistXML
Response.Write st.ReadText
%>
將test.mdb中PRODUCT資料表的資料先開啟於recordset RS中,再使用RS.Save ST, adPersistXML指令,即可將recordset的資料以XML格式儲存於記憶體(使用STREAM物件)中,使用st.ReadText讀取記憶體所有XML資料經過Response.Write顯示出來。
於瀏覽器執行結果如下,顯示此所有XML資料。
記憶體XML格式資料轉到Recordset
於IIS 5.0之ADO 2.5版,使用RS.Open ST指令,即可將儲存於記憶體(使用STREAM物件)中XML格式資料轉到recordset中。
譬如asp程式碼如下:
<%
set objFS = Server.CreateObject("Scripting.FileSystemObject")
xmlfile = Server.MapPath("test.xml")
set objTextStream = objFS.OpenTextFile(xmlfile, 1)
set rs = Server.CreateObject( "ADODB.Recordset" )
set st = Server.CreateObject( "ADODB.Stream" )
st.Open
st.WriteText objTextStream.ReadAll()
st.Position = 0
rs.Open st
%>
<TABLE BORDER=1>
<% Do While Not RS.EOF %>
<TR>
<% For i = 0 to RS.Fields.Count - 1 %>
<TD BGCOLOR="f7efde" VALIGN=TOP><% = RS(i)%></TD>
<% Next %>
</TR>
<%
RS.MoveNext
Loop
RS.Close
%>
</TABLE>
首先使用Scripting.FileSystemObject讀取XML檔案,再使用st.WriteText objTextStream.ReadAll()儲存於記憶體(使用STREAM物件)中,又使用RS.Open ST指令,即可將儲存於記憶體(使用STREAM物件)中XML格式資料轉到recordset中,最後使用RS(i)於瀏覽器顯示出來。
於瀏覽器執行結果如下,顯示此XML檔案資料。
中文部份顯示成亂碼,請讀者試試是否可解決。