概要
從 Active Server Pages (ASP) Web 頁返回 XML 資料是一種常見的編程要求。 實現此要求所用的方法因用來託管 ASP 應用程式的 Microsoft Internet 資訊服務 (IIS) 的版本而異。 本文中的分步指南帶有相關的範例程式碼,示範了怎樣從 ASP 頁返回可延伸標記語言 (XML) (XML) 資料。
下面的範例程式碼建立一個 ASP 頁,此頁返回XML 格式的 ActiveX Data Objects (ADO) 記錄集的內容。 此代碼串連著 SQL Server PUBS 樣本資料庫的一個執行個體,而且它通過執行 SELECT 查詢語句以從 Authors 表中檢索資料的這一方式來開啟 ADO 記錄集。 然後,使用 ADO 的儲存功能和 ASP Response 對象的 Write 方法,將此記錄集以 XML 的格式返回給用戶端瀏覽器。
1. 先決條件
下面簡要列出了推薦使用的硬體、軟體、網路架構以及所需的 Service Pack:
Microsoft Windows 2000 專業版、Windows 2000 Server 或 Windows 2000 Advanced Server
Microsoft Internet Information Server (IIS) 5.0
或
Microsoft Windows NT 4.0 Server
Microsoft Internet Information Server (IIS) 4.0
2. 準備 Web 網站
在 Windows 資源管理員中,在 Web 服務器的根資料夾(通常在 C:InetpubWwwroot)下建立一個名為 Xmltest 的檔案夾。
按右鍵新建立的檔案夾,然後單擊屬性。
在安全選項卡上,添加所有人組,並向“所有人”組授予對此檔案夾的讀和寫入權限。單擊確定接受更改。
在開始菜單上,指向程式,指向管理工具,然後單擊 網際網路服務管理員。
在 Internet 資訊服務下,雙擊展開對應於本機伺服器的條目。
按右鍵“預設 Web 網站”,指向建立,然後單擊虛擬目錄。 在嚮導中,按照下列步驟操作:
系統提示時,在虛擬目錄別名文字框中鍵入 XMLTest,然後單擊下一步。
當提示您鍵入 Web 網站內容目錄時,單擊瀏覽,選擇新建立的 XMLTest 目錄,然後單擊下一步。
在提示您選擇存取權限時,選擇讀和運行指令碼(例如 ASP)。 本例中不需要其他任何存取權限。單擊下一步以完成嚮導。
雙擊“預設 Web 網站”。
按右鍵新的虛擬目錄,然後單擊屬性。
在目錄選項卡上,檢查在應用程式設定下面的應用程式名稱文字框中是否列出了 Web 網站名稱(在步驟 6a 中鍵入的名稱)。如果未列出,請單擊建立以建立該應用程式。
關閉屬性對話方塊和 IIS。
3. Windows 2000 XML 範例程式碼
在開始菜單上,指向程式,指向附件,然後單擊記事本。
選定以下代碼,按右鍵所選內容,然後單擊複製。在記事本中,單擊編輯菜單上的粘貼,將以下代碼添加到該檔案中:
<%
'Very Important : Set the ContentType property of the Response object to text/xml.
Response.ContentType = "text/xml"
Dim cn
Dim rs
Dim xmlDoc
Set cn=Server.CreateObject("ADODB.Connection")
Set rs=Server.CreateObject("ADODB.Recordset")
'Replace the ADO Connection string attributes
'in the following line of code to point to your
'instance of SQL Server, and to specify the
'required security credentials for User ID and Password.
cn.Open "Provider=SQLOLEDB.1;" & _
"User ID=;" & _
"Password=;" & _
"Initial Catalog=pubs;" & _
"Data Source="
rs.CursorLocation = 3
rs.Open "Select * from Authors",cn
'Persist the Recorset in XML format to the ASP Response object.
'The constant value for adPersistXML is 1.
rs.Save Response, 1
%>
在第 20 行代碼中,將 替換為您的使用者名稱。
在第 21 行代碼中,將 替換為您的密碼。
在第 23 行代碼中,將 替換為您的 SQL Server。
在檔案菜單上,單擊儲存。
在儲存在下拉式清單方塊中,瀏覽到您在前面建立的 Xmltest 檔案夾。 在檔案名稱文字框中,鍵入 Xmlw2k.asp,並在檔案類型下拉框中單擊所有檔案。最後單擊儲存以儲存該檔案。
若要查看該頁,請啟動 網頁瀏覽器,然後在地址欄中鍵入該頁的 HTTP 位置。 如果您將檔案儲存到了前面提到的位置,則請在地址欄中鍵入 http://< 伺服器名 >/Xmltest/Xmlw2k.asp 。
4. Windows NT 4.0 XML 範例程式碼
在開始菜單上,指向程式,指向附件,然後單擊記事本。
選定以下代碼,按右鍵所選內容,然後單擊複製。在記事本中,單擊編輯菜單上的粘貼,將以下代碼添加到該檔案中:
<%
'Very Important : Set the ContentType property of
'the Response object to text/xml.
Response.ContentType = "text/xml"
Dim cn
Dim rs
Dim xmlDoc
Set cn=Server.CreateObject("ADODB.Connection")
Set rs=Server.CreateObject("ADODB.Recordset")
'Replace the ADO Connection string attributes
'in the following line of code to point to your
'instance of SQL Server, and to specify the
'required security credentials for User ID and Password.
cn.Open "Provider=SQLOLEDB.1;" & _
"User ID=;" & _
"Password=
"Initial Catalog=pubs;" & _
"Data Source="
rs.CursorLocation = 3
rs.Open "Select * from Authors",cn
Set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
'Persist the Recorset in XML format to the DOMDocument object.
'The constant value for adPersistXML is 1.
rs.Save xmlDoc,1
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
'Write out the xml property of the DOMDocument
'object to the client Browser
Response.Write xmldoc.xml
%>
在第 20 行代碼中,將 替換為您的使用者名稱。
在第 21 行代碼中,將 替換為您的密碼。
在第 23 行代碼中,將 替換為您的 SQL Server。
在檔案菜單上,單擊儲存。
在儲存在下拉式清單方塊中,瀏覽到您在前面建立的 Xmltest 檔案夾。 在檔案名稱文字框中,鍵入 Xmlnt4.asp,並在檔案類型下拉框中單擊所有檔案。最後單擊儲存以儲存該檔案。
若要查看該頁,請啟動 網頁瀏覽器,然後在地址欄中鍵入該頁的 HTTP 位置。 如果您將檔案儲存到了前面提到的位置,則請在地址欄中鍵入 http://< 伺服器名 >/Xmltest/Xmlnt4.asp。備忘: 當在 Windows 2000 中使用 IIS 5.0 時,此 Windows NT 4.0 範例程式碼也可以運行。
5. 缺陷
當您訪問 ASP 頁時,瀏覽器返回空白頁。 請檢查您是否在 ASP 頁的頂部包括了下面這一行:
Response.ContentType = "text/xml"
這應是 ASP 頁中的第一行代碼
在 IIS 5.0 (ASP 3.0) 中,ASP Response 對象實現了 IStream 介面。 所以可以將一個 ADO 記錄集(XML 格式),或一個載入了 XML 資料的 MSXML DOMDocument 對象直接保持到 Response 對象。
在 IIS 4.0 (ASP 2.0) 中,ASP Response 對象未實現 IStream COM 介面。 所以必須使用 Response 對象的 Write 方法從 ASP 中返回 XML。 傳遞給 Write 方法的參數必須是一個完整格式的 XML 字串,或是包含一個完整格式 XML 字串的變數。