吴永光 王晓岩
[摘要]ASP读取XML数据是开发过程中经常遇到的一个难题,具体介绍ASP读取XML数据的实现方法。
[关键词]ASP 读取 XML 方法
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0510032-01
一、引言
ASP是Web服务器端的开发环境,利用它可以产生和执行动态的、互动的、高性能的Web服务应用程序,在ASP文件中访问数据库是最常用的操作,而扩展标记语言XML从本质上看就是数据库,它是自描述性的,可交换的,能够以树状或图形结构描述数据。用XML文件存取数据,可以减少额外的服务器负荷,而且XML文件编写、备份和下载都很容易。ASP读取XML数据有多种方法。
二、ASP读取XML数据的方法
(一)创建MSXML对象,并且将XML文档载入DOM。为了在ASP中使用DOM,需要创建一个DOM对象,然后加载XML文档。在XML文档加载之前,需设置validateOnParse属性为true,这可确保被加载的文档为有效的XML文档,从而可以避免后面遇到的各种麻烦,实例代码片段如下:
Set objxml=Server.CreateObject("MicrosoftXMLDOM")
Objxml.validateOnParse=true
Objxml.load(Server.Mappath("example.xml"))
Set objrootelement=objxml.documentElement
(二)使用服务器端嵌入。服务器端嵌入可用于将XML文档代码插入ASP页面,如同处理任何其它基于文本的文档一样。使用这种方法的唯一问题是,XML代码不是在服务器端分析,而是作为XML直接发送至客户端。如果有意在客户端创建一个XML数据岛,这种方法是可以接受的。但在大多数情况下,浏览器忽略这种标记,因此,分析结果将毫无用处。
一个例外情形是,SSI代码是用HTML标记组成的XML文档。例如下列描述一本书籍信息的XML文档book.xml:
<?xml version="1.0"?>
<book bookid="123-4567-892">
<p>title:Breakfast</p>
<p>pubdate:2008-10-20</p>
</book>
这里<book>标记是用户自定义标记,浏览器并不认识,因此,它完全忽略。然而,<p></p>是标准的XML标记,可以被浏览器理解,于是被正确处理。例如,在下列ASP文件代码片段中嵌入了book.xml:
<%@language="vbscript"%>
…
<body>
<!--#include file="book.xml"-->
</body>
…
运行这个页面,XML将被无缝嵌入,实现了服务器端嵌入XML数据。
(三)使用FileSystemObject访问XML文档。FileSystemObject是在ASP页面中访问文本文件的标准方法,由于XML文档是基于文本的,所以,可以用它来打开文档。虽然MSXML处理程序有一个用于打开XML文档的load方法,可以代替FileSystemObject来完成相同的任务,但是在有些场合,如没有真正加载文档的条件下,需要使用FileSystemObject来访问XML文档,并执行一个操作,如检查文件中的Attributes。
例如,一个简单的文本搜索程序,简化后的代码如下:
dim fso,file,XMLStr,path
set fso=CreateObject("Scripting.FileSystemObject")
path=server.Mappath("book.xml")
set file=fso.OpenTextFile(path)
XMLStr=file.ReadAll
file.Close
if InStr(XMLStr,"Breakfast")>0 then
Response.write "Text is found!"
else
Response.write "Could not find the text!"
end if
set fso=nothing
(四)在客户端创建数据岛。数据岛是服务器和客户机之间进行数据传递的一种方式。它存在于HTML网页中,是一段XML代码。XML数据岛在HTML中形成了一个数据的集合,通过特定的标签把XML数据直接嵌入到HTML文档中。数据岛有特有的形式,由标记<XML>开始,在开始标记中要有一个ID属性,用于指定该数据岛的名称,最后还要以</XML>结束。在客户端创建数据岛有两种形式,一种为内嵌的数据岛,即直接把XML文档片段嵌入ASP程序,下面代码片段通过一个实例来实现内嵌数据岛:
<xml id="example">
<book bookid="123-4567-892">
<title>Breakfast</title >
<pubdate>2008-10-20</pubdate >
</book>
</xml>
<body>
<table datasrc="# example">
<tr>
<td><span DATAFLD="title"></span></td>
<td><span DATAFLD="pubdate"></span></td>
</tr>
</table>
</body>
如上例所示,用datasrc绑定数据岛的时候,需要在已定义的数据岛名称前加“#”,绑定具体元素时,用DATAFLD就可以了。另一种是外嵌的数据岛,形式为:<xml id="example"src="book.xml"></xml>
外嵌数据岛绑定元素的方法同内嵌数据岛是一样的,只是在定义数据岛的时候,需要指明嵌入的XML文件的路径及名称,具体实现代码从略。
三、总结
本文详细阐述了ASP读取XML数据的四种方法的实现过程,当然,方法不是只有这几种,更多的方法需要我们进一步探讨和实践,这样我们才能更好的利用ASP、XML等相关的技术。
参考文献:
[1]吴洁,XML应用教程,北京:清华大学出版社,2005.12.
[2]丁跃潮等,XML实用教程,北京:北京大学出版社,2006.10.
[3]尚俊杰,网络程序设计-ASP,北京:清华大学出版社,2006.12.