曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
語言的主要不同。為什么選擇V B S c r i p t?原因很簡單—因為三百萬的開發者可以讀懂它。
下面的腳本可以通過Windows 腳本主機(W S H,Windows Script Host)來運行。假設你已
經安裝了W S H,很簡單,將文件保存為Tr a n s f o r m . v b s,并且雙擊它:
程序清單9 - 3 5
第9章轉換XML使用347 下載
讓我們看一下這個腳本的更多的細節。第一個任務是使用C r e a t e O b j e c t ( )方法創建一個D O M
對象。然后裝入源文檔到D O M中,分析它,并且填入內部的樹狀命令—所有這些使用l o a d ( )方
法:
上面的兩行不是D O M規范的一部分,它們只是特別用在V B S c r i p t環境中。
很幸運,我們沒有得到一個復雜的文檔命令,使用g e t E l e m e n t s B y Ta g N a m e ( )方法可以很容易
地得到需要的元素。如果文檔命令包含同樣的元素,但是位于不同的級別下,可能就會復雜得
多。那么,下一步就是得到需要轉換的所有的元素對象:
程序清單9 - 3 6
現在我們需要處理包含在b o o k l i s t中的任何的< I T E M >元素對象。為了實現它,在D O M中我們
獲得了< I T E M >元素節點的對象實例的個數,使用l e n g t h ( )方法。你可能希望在這里是c o u n t ( )方法,
但是W 3 C規范使用l e n g t h ( )來表示一個計數實例。注意,有效子節點的范圍是從0到l e n g t h - 1。
因為我們不得不增加一個新元素節點作為< I T E M >元素的子節點,我們創建了一個對象工廠
保含在D O M對象中:
然后我們在當前處理的< I T E M >節點的后面追加新的元素,作為一個子節點。一個元素對象
被返回,代表了< D E S C R I P T I O N >元素節點。
到這個階段, 我們已經修改了內部命令,通過增加
< D E S C R I P T I O N >節點為< I T E M >元素的子節點,如圖9 - 2 2所示。
然后我們包含了< T I T L E >、< C O D E >和< C AT E G O RY >作為
< D E S C R I P T I O N >元素的孩子:
實際上,我們移動了這些節點的實際位置到一個新的位置,如圖9 - 2 3所示。
然后我們使用同樣的方法來創建一個新的< L I S T I N G >元素節點。我們生成它,并把它作
為子節點插入到< I T E M >元素節點中,我們將< R E L E A S E _ D AT E >和< P R I C E >元素節點從原來
作為< I T E M >元素節點的子節點的位置,移動到作為< L I S T I N G >元素節點的子節點的新的位
置:
348使用XML 高級編程
下載
圖9-22
圖9-23
程序清單9 - 3 7
最后,我們將轉換后的節點存為一個X M L文檔:
9.5.2 在運行時修改一個XSLT文檔
直到現在,我們一直停留在標準的界限里,并且以前的例子可以在任何一個遵循W 3 C推薦
標準的X S LT處理器上運行。然而,在這一部分,我們將使用一些M i c r o s o f t的專有擴展來演示
X S LT是如何使用在用戶交互上的。
一個X S L 樣式表有兩種激活方式。一種是在要進行處理的X M L 文檔中包含一個
< x s l : s t y l e s h e e t >處理指令,另一種是通過D O M的私有擴展進行交互。在所有前面的例子中,我
們使用了處理指令作為一個與樣式表的鏈接,但是在這一部分,我們將使用微軟的專有的D O M
擴展來同X L S T處理器進行交互,用來顯示如何用X S LT排序圖書列表。
在這個例子中使用的幾個命令對于M i c r o s o f t的I E 5是特殊的。一些命令不過是過時的X S LT
命令,其他的在這個實現中是流行的,但不是W 3 C標準的一部分。所以,舉出的例子只能在
M i c r o s o f t的I E 5上工作。其他的X S LT引擎,像X T,將會報錯。
下面的X S LT腳本將用于翻譯Booklist XML文檔:
程序清單9 - 3 8
第9章轉換XML使用349 下載
M i c r o s o f t的I E瀏覽器要做的第一件事是分析X M L和X S L文檔。M i c r o s o f t的分析器為兩個文
350使用XML 高級編程
下載
檔創建了一個文檔模型。這些文檔中的每個都可以被D O M的擴展版本進行處理。M i c r o s o f t用
C O M接口實現了D O M,并且加入了新的函數。我們可以說,在某些方面M i c r o s o f t的擴展接口繼
承了W 3 C的標準接口,并且加入了新的屬性和方法。就是這些被加入的方法,不是W 3 C的方法,
我們將在例子中使用。
執行運行時動態行為的元素是< s c r i p t >元素。在運行時被分析和執行的第一個腳本沒有與任
何特別對象關聯。這個腳本即沒有f o r屬性也沒有e v e n t屬性。
程序清單9 - 3 9
腳本本身是用< x s l : c o m m e n t >元素括起來的。< x s l : c o m m e n t >被翻譯(在輸出樹中)成X M L
文檔注釋元素。這個腳本是用J a v a S c r i p t所寫的,你可能注意到,我們聲明了三個對象,并且賦
了一個n u l l值。
在運行時將被激活的第一個事件是w i n d o w. o n l o a d事件。我們在這個事件上附上一段腳本:
程序清單9 - 4 0
首先,我們從文檔對象中得到X S L樣式表文檔。然后,我們從文檔對象中得到X M L文檔。在
X M L對象分級中,文檔對象包括了兩個擴展的D O M:
X M L擴展D O M和X S L擴展D O M(參見圖9 - 2 4)。
兩個對象都是有用的,對排序、轉換和在I E上顯
示X M L文檔。
我們也可以從X S L樹上得到排序域對象。為了得
到這個對象,我們請求擴展D O M返回找到的包含
o r d e r- b y屬性的第一個對象。這里有一個單個的元素包含這樣的屬性: < x s l : f o r- e a c h >結構。
程序清單9 - 4 1
第9章轉換XML使用351 下載
圖9-24
文檔
XML文檔(XML Document)
XSL文檔(XSL Document)
應該提醒大家的是,在寫出這個文檔的時候,最新的規范已經改變了排序機制,這個命令
不再是一個標準的了。所以,當I E變得與這個規范兼容時,排序應該被定義成:
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(115)