ASP 与 XML

筆者為微軟台北廳、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檔案資料。

中文部份顯示成亂碼,請讀者試試是否可解決。

你可能感兴趣的:(xml,IE,Microsoft,asp,IIS)