曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
的轉換處理。
與M S X M L不同,它包括了自己的X M L解析器,X T引擎能夠操作與任何S A X兼容的解析器
(S A X在第6章中已經討論過)。一旦S A X解析器用J a v a實現,它將與X T引擎相適應。軟件包也包
括了一個名為X P的快速J a v a解析器。
X T是通過命令行來使用的。在Wi n d o w s下,運行X T比在其他平臺上運行要容易。下面的命
令行轉換一個X M L文檔,通過X S LT樣式表,輸出一個H T M L文檔:
X T也可以接受X S LT參數,例如:
在上面的例子中, r e s u l t參數被包含在X S LT樣式表中,作為一個X S LT變量。這個變量可以
被用在X S LT模板中。
X T的一個很大的好處就是它可以在除了Wi n d o w s以外的平臺上運行。然而,不是所有的平
臺允許運行J a v a應用程序作為獨立可執行的方式,大部分的平臺要求通過Java JDK所提供的J a v a
可執行應用程序來運行。例如,下面的命令行將在L i n u x下運行X T:
第9章轉換XML使用317 下載
X T引擎的速度依賴于機器的處理能力,因為J a v a是一種解釋語言。
3. 使用X S LT
現在看一下X S LT是如何工作的,我們將直接跳到一個簡單的例子上。讓我們用一個用X M L
標記的書的細節開始,將它轉換成X H T M L,用于在瀏覽器上顯示。
X H T M L是HTML 4.0的擴展版本,被設計用在X M L的應用上。更詳細的信息,參考最新
的W3C推薦標準http://www.w3.org/TR/xhtml1。
這是一些用X M L標記的書的目錄信息,使用的是第3章的D T D:
程序清單9 - 5
讓我們看一下簡單的X S LT樣式表,它將用來轉換源文檔到要求的結果文檔。結果文檔將是
一個X H T M L文檔,用于顯示分類中書的題目:
程序清單9 - 6
318使用XML 高級編程
下載
最后,結果X H T M L文檔將看上去如程序清單9 - 7所示。
根據X S LT推薦標準版本1,本例只能由X S LT引擎來執行。S A X O N和X T屬于該范圍。I E
5 . 0不支持—因為它不支持XPa t h和一些X S LT命令。然而,在本例中可將以上文件改為
IE 5.0支持的, 將命名空間由h t t p : / / w w w. w 3 . o rg / 1 9 9 9 / X S L / Tr a n s f o r m改為
h t t p : / / w w w. w 3 . o rg / T R / W D - x s l,并且刪除<xsl:output method="html"/>語句。但要記住,即
使做了上述修改,也不能適用于本章所有的例子,所以最好在出現最新的支持I E的解析
器之后,再使用XT。
程序清單9 - 7
第9章轉換XML使用319 下載
簡單的結果看上去如圖9 - 4所示。
圖9-4
(1) 得到轉換的幫助
為了更好的理解假定的例子,想象一下,你現在就是一個X S LT引擎,以它們的眼光來看這
個世界(繼續,沒人看你)。首先,作為一個X S LT引擎,記住,你需要的是文檔命令而不是文
本本身。畢竟,你可以只處理命令而不是文本。所以,某人就不得不轉換文本為要求的抽象樹
命令,樹林。作為一個X S LT引擎,你可能有以下兩個好朋友中的一個:
• 一個D O M接口的解析器。
• 一個只給出你每個元素事件的解析器。
如果你使用的是一個D O M接口的解析器的服務,這就意味著解析器封裝了整個樹,通過
D O M接口來處理在樹林上的任何對象。
如果你使用一個給出每個元素事件的解析器,將自己管理樹林并且按自己的想法保存文檔
命令。這就是使用S A X接口的J a v a方法。
所以,可愛的X S LT引擎,你可以選擇是通過D O M接口的解析器來得到幫助對樹林進行管理,
還是通過自己管理它。
320使用XML 高級編程
下載
內部命令可以用不同的方法實現;然而,盡管你使用關聯數組或鏈表的鏈表,模型化的
命令是一棵樹。DOM是W3C的推薦,指出了如何定義命令的接口。
如果你記起前面的示意圖,將有三棵樹。一個包含了源文檔的表示,一個是結果樹命令的
表示,但是第三棵樹是什么?不是一個X S LT文檔或是一個X M L文檔嗎?是的。你已經開始進入
角色了。如果是X S LT文檔,轉換成一種內部的樹狀命令并不表示將文本轉換成一種分級命令。
X S LT內部命令可能是一些其他內容,為X S LT處理優化過的東西。
所以,原始的X M L文檔首先被解析,然后被轉換成一種抽象的樹狀命令,一種分級命令的
內部表示。D O M是這個內部命令的接口。X S LT文檔也被解析,轉換成一種內部命令。可能是一
種抽象的樹狀命令,但是也可能是另一種命令,被優化過用于模板的處理和模式匹配。
C a t a l o g . x m l文件:
程序清單9 - 8
可能會被表示成為如下的抽象樹,用在X S L處理器中(參見圖9 - 5)。
圖9-5
(2) 樣式表如何轉換文檔
如我們所講到的, X S L是一個X M L的應用,所以樣式表(如果你愿意也可以稱之為轉換表)
第9章轉換XML使用321 下載
是一個真正的X M L文檔。因為它是一個X M L文檔,它可以使用X M L的聲明開始,指示了X M L
解析器這個文檔編碼的X M L版本。
在我們的樣式表中的根元素是< x s l : s t y l e s h e e t >元素:
< x s l : s t y l e s h e e t >元素的第一個屬性是X S LT的版本。第二個屬性是x m l n s : x s l,用來控制X S L
轉換推薦的命名空間。
你可能還記得第7章,關于命名空間和模式,這個聲明了X S LT的命名空間。你可以看到,
命名空間的前綴為x s l,所以根元素實際是< s t y l e s h e e t >,但是它被xsl: 進行了限制,作為它的名
字前綴。在已經聲明了命名空間,任何一個以x s l :為前綴的元素都被看作X S L的詞匯表。
< s t y l e s h e e t >元素包含三個模板,每一個都嵌在< t e m p l a t e >元素中,在樣式表中確切的是
< x s l : t e m p l a t e >,是由于我們包括了命名空間。你會注意到,在< t e m p l a t e >元素中有一個叫m a t c h
的屬性。這個屬性的值是一個模式,按照X P a t h表達式的形式,用來匹配應該應用模板的樹的節
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(108)