答案:概要
从 Active Server Pages (ASP) Web 页返回 XML 数据是一种常见的编程要求。 实现此要求所用的方法因用来托管 ASP 应用程序的 Microsoft Internet 信息服务 (IIS) 的版本而异。 本文中的分步指南带有相关的示例代码,演示了怎样从 ASP 页返回可扩展标记语言 (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 服务管理器。
在 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=<userid>;" & _
"Password=<password>;" & _
"Initial Catalog=pubs;" & _
"Data Source=<servername>"
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 行代码中,将 <userid> 替换为您的用户名。
在第 21 行代码中,将 <password> 替换为您的密码。
在第 23 行代码中,将 <servername> 替换为您的 SQL Server。
在文件菜单上,单击保存。
在保存在下拉列表框中,浏览到您在前面创建的 Xmltest 文件夹。 在文件名文本框中,键入 Xmlw2k.asp,并在保存类型下拉框中单击所有文件。最后单击保存以保存该文件。
若要查看该页,请启动 Web 浏览器,然后在地址栏中键入该页的 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=<userid>;" & _
"Password=<password;" & _
"Initial Catalog=pubs;" & _
"Data Source=<servername>"
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 行代码中,将 <userid> 替换为您的用户名。
在第 21 行代码中,将 <password> 替换为您的密码。
在第 23 行代码中,将 <servername> 替换为您的 SQL Server。
在文件菜单上,单击保存。
在保存在下拉列表框中,浏览到您在前面创建的 Xmltest 文件夹。 在文件名文本框中,键入 Xmlnt4.asp,并在保存类型下拉框中单击所有文件。最后单击保存以保存该文件。
若要查看该页,请启动 Web 浏览器,然后在地址栏中键入该页的 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 字符串的变量。
上一个:XmlHttp异步获取网站数据的例子
下一个:实例演练ASP+XML编程(4)