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