在本文開(kāi)始部分,我們對(duì)XML這個(gè)新興的技術(shù)做了一個(gè)概述,對(duì)它的優(yōu)缺點(diǎn)進(jìn)行了分析,并對(duì)其美好的應(yīng)用前景進(jìn)行了展望。在本文后半部分則對(duì)XML文檔的相關(guān)語(yǔ)法、格式做了簡(jiǎn)要的描述,并介紹了幾種有用的開(kāi)發(fā)工具。在以后的內(nèi)容中,我們會(huì)全面展開(kāi),深入到XML技術(shù)內(nèi)部,去探索一下這個(gè)美妙的世界!
一、顯示XML
XML文檔本身只描述數(shù)據(jù)內(nèi)容,它的顯示功能由樣式單來(lái)完成。利用樣式單技術(shù)時(shí),輸出平臺(tái)不局限于顯示器,可以是打印機(jī)、繪圖儀或者是多媒體播放器。使用獨(dú)立的樣式單文件制定顯示格式的一大優(yōu)勢(shì)在于:對(duì)同一份數(shù)據(jù)文件可以制定不同的樣式風(fēng)格,應(yīng)用在不同的場(chǎng)合,使數(shù)據(jù)能夠更合理、更有針對(duì)性地表現(xiàn)出來(lái),提高了數(shù)據(jù)的重用性。
目前,W3C正式推薦的樣式單標(biāo)準(zhǔn)有兩種: 一種是層疊樣式單CSS(Cascading Style Sheets);另一種是可擴(kuò)展樣式單語(yǔ)言XSL。
CSS最初是用于制定HTML文檔顯示格式的,現(xiàn)在也可用來(lái)對(duì)XML文檔進(jìn)行簡(jiǎn)單的樣式規(guī)劃。CSS在HTML中的應(yīng)用極為廣泛,但它在文本置換、依據(jù)文本內(nèi)容而決定顯示方式、對(duì)數(shù)據(jù)進(jìn)行排序等智能化的顯示功能上略顯不足。
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/css" href="cd_catalog.css"?>
而XSL則較好地解決了CSS的這些問(wèn)題,它最常用的功能是將XML的置標(biāo)轉(zhuǎn)換成為HTML的置標(biāo)并顯示輸出。而且XSL還可以將XML文檔向任何其他格式的結(jié)構(gòu)文檔進(jìn)行轉(zhuǎn)換。這種功能在B2B的商務(wù)模式中有著很好的應(yīng)用前景。
XSL利用模式匹配的方法,選擇XML文檔中需要處理的元素/屬性,再針對(duì)這些特定的對(duì)象制定相應(yīng)的轉(zhuǎn)換規(guī)則。借助XSL,我們還可以添加新的元素/屬性,對(duì)所有元素/屬性進(jìn)行重新排序、循環(huán)處理、條件判斷等程序化的控制,使其適應(yīng)各種復(fù)雜的需求。
在XML文檔中引用XSL的格式如下:
<?xml-stylesheet type=“text/xsl” href=“Employees.xsl” ?>;
一個(gè)XML文檔只能引用一個(gè)XSL樣式單。XML解析器在處理XML文檔時(shí),遇到處理指令后,會(huì)載入指定的XSL樣式單,然后根據(jù)其中的規(guī)則進(jìn)行相應(yīng)的轉(zhuǎn)換處理。
二、綁定XML
Web服務(wù)器與客戶(hù)機(jī)之間的數(shù)據(jù)傳遞方式有三種: HTML頁(yè)面、XML文檔以及XML數(shù)據(jù)島。其中,XML數(shù)據(jù)島通過(guò)特定的標(biāo)簽把XML數(shù)據(jù)直接嵌入到HTML文檔中。采用數(shù)據(jù)島作為交互手段,不僅可以使數(shù)據(jù)具備一定的語(yǔ)義信息,同時(shí)還能保持HTML原有的一些特色,如利用用戶(hù)端腳本程序?qū)崿F(xiàn)動(dòng)態(tài)信息交換等。
XML數(shù)據(jù)島的實(shí)現(xiàn)方法是在HTML文檔中使用<XML>;標(biāo)簽。代碼的嵌入方式有兩種: 直接嵌入(如例1)和外部引用(如例2)。
例1:
<XML ID=“MyXMLData”>;
<?xml version=“1.0” ?>;
……XML definitions……
</XML>;
例2:
<XML ID=“MyXMLData” SRC=“http://www.microsoft.com/MyXMLData.xml”>;
</XML>;
在插入數(shù)據(jù)島之后,就可以把XML中的元素同HTML元素鏈接在一起,利用HTML的表現(xiàn)手法顯示XML數(shù)據(jù),這種鏈接關(guān)系被稱(chēng)為綁定。綁定的方式按照HTML元素的性質(zhì)可以分為兩種:?jiǎn)沃祵?duì)象和表格對(duì)象。
單值對(duì)象的數(shù)據(jù)綁定需要在HTML元素中設(shè)置DATASRC屬性和DATAFLD屬性。DATASRC屬性是區(qū)分XML數(shù)據(jù)島對(duì)象的唯一標(biāo)識(shí),并且必須加上前綴“#”;DATAFLD屬性則標(biāo)識(shí)了數(shù)據(jù)島中的元素對(duì)象。例3就是把一個(gè)HTML文本輸入框與<salary>;元素進(jìn)行了綁定。
例3:
<INPUT TYPE=“TEXT”
DATASRC=“#MyXMLData”
DATAFLD=“salary”>;
至于表格對(duì)象,主要是與HTML中的<TABLE>;標(biāo)簽綁定。一般地,可以借助DSO(Data Source Object,數(shù)據(jù)源對(duì)象)等ActiveX控件更方便、有效地處理表格數(shù)據(jù)。具體使用方法在以后的內(nèi)容中將做詳細(xì)介紹。
XML數(shù)據(jù)島可以綁定到HTML元素上(比如表格)。
在下面的例子中,一個(gè)XML數(shù)據(jù)島(ID=cdcat)被從外部XML文檔載入。一個(gè)HTML的表格綁定到此數(shù)據(jù)島上。HTML表格內(nèi)部的span元素使用datafld屬性和XML文檔相應(yīng)的XML元素相互綁定。
<html>
<body>
<xml id="cdcat" src="cd_catalog.xml"></xml>
<table border="1" datasrc="#cdcat">
<tr>
<td><span datafld="ARTIST"></span></td>
<td><span datafld="TITLE"></span></td>
</tr>
</table>
</body>
</html>
三、訪問(wèn)XML
Document Object Model(文檔對(duì)象模型)簡(jiǎn)稱(chēng)為DOM,是對(duì)Web文檔進(jìn)行應(yīng)用開(kāi)發(fā)、編程的應(yīng)用程序接口(API),是W3C公布的一種跨平臺(tái)的、與語(yǔ)言無(wú)關(guān)的接口規(guī)范。
DOM采用對(duì)象模型和一系列的接口來(lái)描述XML文檔的內(nèi)容和結(jié)構(gòu),即利用對(duì)象把文檔模型化。這種對(duì)象模型實(shí)現(xiàn)的基本功能包括:
● 描述文檔表示和操作的接口;
● 接口的行為和屬性;
● 接口之間的關(guān)系以及互操作。
DOM對(duì)結(jié)構(gòu)化的XML文檔進(jìn)行解析,文檔中的指令、元素、實(shí)體、屬性等所有個(gè)體都可以用對(duì)象模型表示。整個(gè)文檔的邏輯結(jié)構(gòu)類(lèi)似一棵樹(shù),生成的對(duì)象模型就是樹(shù)的節(jié)點(diǎn),每個(gè)對(duì)象同時(shí)包含了方法和屬性。
利用DOM,開(kāi)發(fā)人員可以進(jìn)行動(dòng)態(tài)地創(chuàng)建XML文檔、遍歷結(jié)構(gòu)、添加/修改/刪除內(nèi)容等操作。DOM面向?qū)ο蟮奶匦?,使人們?cè)谔幚砗蚗ML解析相關(guān)的事務(wù)時(shí)節(jié)省大量精力,是一種符合代碼重用思想的強(qiáng)有力編程工具。
四、XML解析器
如果瀏覽器使用javascript作為腳本語(yǔ)言,那么利用下面的代碼可以創(chuàng)建XML文檔對(duì)象:
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")
如果瀏覽器使用VBScript作為腳本語(yǔ)言,那么利用下面的代碼可以創(chuàng)建XML文檔對(duì)象:
set xmlDoc=CreateObject("Microsoft.XMLDOM")
如果在ASP程序中使用VBScript腳本語(yǔ)言,那么就可以使用下面的代碼形式:
set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")
將XML文檔載入解析器
使用腳本代碼可以將XML文檔載入解析器。
下面的代碼可以將一個(gè)XML文檔載入解析器:
<script type="text/javascript">
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("note.xml")
// ....... processing the document goes here
</script>
第二行代碼創(chuàng)建Microsoft XML解析器的實(shí)例。
第三行代碼關(guān)閉異步載入,確保XML解析器在把XML文檔完全載入以前不會(huì)對(duì)XML文檔進(jìn)行解析。
第四行則告訴解析器需要載入的XML文檔名字是note.xml。
把純XML文檔由字符載入解析器
解析器可以從一個(gè)文本字符串中載入XML文本。
下面的代碼演示了將文本字符串載入解析器:
<script type="text/javascript">
var text="<note>"
text=text+"<to>Tove</to><from>Jani</from>"
text=text+"<heading>Reminder</heading>"
text=text+"<body>Don‘t forget me this weekend!</body>"
text=text+"</note>"
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.loadXML(text)
// ....... processing the document goes here
</script>
注意這里載入字符串使用的是"loadXML()"方法)(而不是前面用過(guò)的"load()"方法), "loadXML()"是用于載入字符串,"load()"是用于載入XML文檔。
使用javascript語(yǔ)言顯示XML數(shù)據(jù)
可以使用javascript語(yǔ)言來(lái)顯示XML數(shù)據(jù)。
javascript (或者 VBScript)可以從XML文檔中導(dǎo)入數(shù)據(jù),并將這些數(shù)據(jù)在HTML頁(yè)面中顯示出來(lái)。
<html>
<head>
<script type="text/javascript"
for="window" event="onload">
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("xml_note.xml")
nodes=xmlDoc.documentElement.childNodes
to.innerText= nodes.item(0).text
from.innerText= nodes.item(1).text
header.innerText=nodes.item(2).text
body.innerText= nodes.item(3).text
</script>
<title>HTML using XML data</title>
</head>
<body bgcolor="yellow">
<h1>W3Schools.com Internal Note</h1>
<b>To: </b>
<span id="to"> </span>
<br />
<b>From: </b>
<span id="from"></span>
<hr>
<b><span id="header"></span></b>
<hr>
<span id="body"></span>
</body>
</html>
聯(lián)系客服