侯春英
摘 要:XML因其靈活性、適用性及跨平臺性成為信息存儲和處理的首選方式。XML文檔是一種純文本文件,其存取方式是XML應(yīng)用過程中的一個(gè)關(guān)鍵問題。本文從實(shí)際應(yīng)用角度出發(fā)介紹一種用文檔對象模型(DOM)對XML數(shù)據(jù)進(jìn)行提取操作的實(shí)現(xiàn)過程。
關(guān)鍵詞:XML;DOM;數(shù)據(jù)提取
隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,網(wǎng)絡(luò)數(shù)據(jù)的存儲和提取方式也就成為一個(gè)被關(guān)注的問題。在許多異構(gòu)數(shù)據(jù)庫、多服務(wù)器和數(shù)據(jù)存儲系統(tǒng)、復(fù)雜文件和相對不定結(jié)構(gòu)文件的數(shù)據(jù)存儲中,XML還是倍受青睞。因?yàn)橐訶ML存儲的方式可以方便地實(shí)現(xiàn)平臺轉(zhuǎn)換,同時(shí)XML也是數(shù)據(jù)庫之間傳送數(shù)據(jù)的首選方法。另外,在數(shù)據(jù)結(jié)構(gòu)相對不固定的情況下,XML更成為數(shù)據(jù)存儲的理想方式。
獲取XML數(shù)據(jù)的方法有多種,但在大多數(shù)據(jù)情況下,以DOM(Document Object Model)即文檔對象模型來處理XML文件是非??扇〉?。一般情況下,用DOM對XML文檔進(jìn)行處理過程包括以下幾個(gè)步驟:
1 創(chuàng)建DOM實(shí)例
創(chuàng)建一個(gè)DOM實(shí)例通??梢圆捎孟率龇椒ǎ?/p>
set [object]=server.createobject(“Microsoft.XMLDOM”)
2 將已建好的XML文檔加載進(jìn)來
(1)在加載XML文檔時(shí)要設(shè)置async屬性為False,這樣當(dāng)文檔加載完畢,控制權(quán)才會返回給調(diào)用進(jìn)程。
(2)加載一個(gè)XML文檔可以采用下述方法:
[object].load(“文檔”)
說明:如XML文檔來自于Internet,則其XML文檔標(biāo)識符形式就為http://url。其中:url為要載入XML文檔的絕對地址。
3 創(chuàng)建XML文檔的元素結(jié)點(diǎn)清單
因?yàn)樗鶆?chuàng)建XML文檔的元素結(jié)點(diǎn)清單要保存起來以備使用,所以要先定義一個(gè)變量,然后用DOM的getElementsBYTagName()方法創(chuàng)建所加載的XML文檔元素的清單,并保存在所定義的變量中:
DIM [Vn]
Set [Vn]= getElementsBYTagName(“元素”)
注:[Vn] 是自己定義的變量;“元素”是指所加載的XML文件的實(shí)體元素名稱。
4 用循環(huán)過程實(shí)現(xiàn)對XML文檔的遍歷及數(shù)據(jù)的提取
在對XML文檔進(jìn)行遍歷時(shí),可采用以下的結(jié)構(gòu)方式:
for I=0 TO [Vn].length-1
if <條件> then
for J=0 TO m
response.write [Vn].item(i).childnodes(J).text
next
end if
next
下面來看一下完整的程序:
find.htm文件內(nèi)容如下:
Find.asp文件內(nèi)容如下:
<%
dim oXLMDOM
dim recordlist
set oXLMDOM=Server.CreateObject("Microsoft.XMLDOM")
oXLMDOM.async = False
oXLMDOM.load server.mappath("finddata.xml")
set recordlist=oXLMDOM.getElementsByTagNAME("個(gè)人資料")
dim bz
bz=0
for i=0 to recordlist.length-1
if recordlist.item(i).firstchild.firstchild.nodevalue=request.form("姓名") then
for j=0 to 5
response.write recordlist.item(i).childnodes(j).text%>
<% next
bz=1
end if
next
if bz=0 then
response.write "對不起,無此人信息!"
end if
%>
說明:此程序中BZ為一個(gè)標(biāo)志變量,其它均如前所述。
finddata.xml文件內(nèi)容如下:
<?xml version="1.0" encoding="gb2312"?>
<學(xué)生資料表>
<個(gè)人資料>
<姓名>王小龍姓名
<性別>女性別
<文化程度>高中文化程度
<喜愛顏色>紅色喜愛顏色
<學(xué)習(xí)目標(biāo)>高級學(xué)習(xí)目標(biāo)
<登錄口令>hcy001登錄口令
個(gè)人資料
學(xué)生資料表
此程序中存儲著多條個(gè)人資料信息,本處只用一條示例。
說明:本程序已在IE瀏覽器上運(yùn)行通過。運(yùn)行時(shí)可將上述三個(gè)文件放在同一個(gè)WWW目錄下。