曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
< P r i c e >都是< B o o k >的孩子,并且< C a t e g o r y >是< B o o k >的孫子,是< R e c S u b j C a t e g o r i e s >的孩子。
這就是為什么我們說,這個抽象的樹狀命令是一種獨立于處理它的A P I的一種模型(正如W 3 C的
D O M),并且這種命令是X S L處理器所使用的,用于選擇命令中的相應部分。X P a t h是一種語言,
用于處理樹中的任何元素。
314使用XML 高級編程
下載
圖9-2
2. XSL處理器如何轉換源文檔
正如我們所說, X S LT操作的是文檔的模型而不是語法。源和目標格式都是X M L的應用,并
且兩個的分級命令都是一棵樹。另外X S L樣式表是一個X M L文檔,所以它也可以用一棵樹來表
示。所以, X S LT處理器一共有三棵樹。
X S LT是一種公布的語言,意思是你來指定結果的顯示,勝于說它如何被轉換,并且這就是
為什么我們使用X S L處理器來做這件工作。X S L樣式表是由模板組成,它指定了源樹中的每個節
點在結果中應如何顯示。
圖9 - 3說明了處理器是如何工作的。
圖9-3
第9章轉換XML使用315 下載
元素節點
屬性節點
值節點
樣式表XSL
XSL 引擎
結果節
點樹
指令執行
樣式單節點樹
(模板)
源節
源點樹
圖例
源節
點
樣式表結
果節點
樣式表指
令節點
非
XML
XML
格式化的
對象
格式化的
對象
結果
在這里面我們可以看到有三個命令。記住源和結果命令都是文檔的抽象表現。處理器遍歷
源樹林,從根開始,查找與在樣式表中模板相匹配的節點。當找到一個,它使用在模板中的規
則在結果樹中寫出結果的抽象表示。然后,在源文檔中繼續移動,一個節點接著一個節點,根
據前導的X S LT指令< x s l : a p p l y - t e m p l a t e >,在樣式表中查找相應的匹配。如果沒有可匹配的模板,
它就移動到下一個命令。我們可以說它執行一個缺省模板,不輸出任何結果。然后,結果樹被
轉換成一個X M L文檔、文本、H T M L文檔或希望的結果。
這個,在理論上可能會發生。但是也有不同的變化關于如何建立X S LT引擎。X S LT引擎可能
被優化,并且樣式表可能不再需要被存儲為樹林或樹狀命令。然而,這給出了它們行為的一般
的方法。
在瀏覽過一個X S L處理器為了執行它的轉換是如何工作之后,你將需要確認在機器上已經安
裝了這個章節的例子。有不同的方法來實現一個X S L處理器,讓我們看一下其中的兩個:
• M S X M L—M i c r o s o f t的X M L解析器,有一個D O M接口,以D O M組件的形式包括了一個
X S LT引擎。包含在I E 5中M S X M L引擎與推薦的相比已經相當過時了。技術預覽版則更新
一些。
• X T—James Clark的致力研究的X S LT引擎。它是用J a v a編寫的,所以可以跨越平臺。從
最新的X S LT規范的一致性來說X T要更新一些。
MSXML XSL處理器M S X M L不只是一個解析器,它還包括了一個X S L處理器。M S X M L
同I E 5高度集成,但是也可以做為一個獨立的C O M組件,可從h t t p : / / m s d n . m i c r o s o f t . c o m / x m l得到,
用于應用程序的集成。這個組件使用D O M來操作X M L文檔的抽象樹狀命令。因為這樣,它可以
被接口化用在像J a v a S c r i p t、D e l p h i、Visual Basic 、Vi s u a l C O B O L、V B S c r i p t、P e r l S c r i p t、
P y t h o n S c r i p t、C + +等語言中。這個組件要求至少系統中有I E 4或以上版本存在,因為M i c r o s o f t的
X S LT引擎需要一些它提供的其他的D L L。
最初的D O M接口被定義成使用C O R B A接口定義語言(I D L,Interface Definition Language),
但是M i c r o s o f t的組件技術C O M使用不同的I D L,所以M S X M L組件接口是用COM IDL來定義的。
不過, M i c r o s o f t的D O M實現,考慮了推薦的精神,在對象接口中保留了同樣的方法名。接口
I X M L D o c u m e n t是相當于W3C DOM一級d o c u m e n t接口。W3C document接口從n o d e接口派生,
很像I X M L D o c u m e n t接口從I X M L N o d e接口派生而來。I X M L D o c u m e n t接口已經被擴展,包含了
針對X M L文檔解析及轉換的額外方法。
例如,下面的A S P腳本用于M S X M L組件的I X M L D o c u m e n t接口來解析要轉換的X M L文檔和
X S L樣式表。然后,它將分析過的源X M L文檔進行轉換,通過使用分析過的X S L轉換表:
程序清單9 - 4
316使用XML 高級編程
下載
使用M S X M L轉換文檔的一般機制是:
• 裝入要轉換的初始文檔。l o a d ( )方法同時會解析文檔,以便文檔作為一棵樹狀命令被保存
(像我們在前面看到的一樣)。
• 裝入X S LT文檔。l o a d ( )方法再一次解析文檔并將其轉換成樹。
• 使用t r a n s f o r m N o d e ( )函數進行轉換。這個函數返回一個字符串(一個B S T R)。在返回字符
串中包含了轉換后的文檔。所以,如果X S LT轉換表包含一個從X M L到H T M L轉換的話,
保存在結果串中的文檔就是一個H T M L文檔。
• 集成在M S X M L組件中的組件有。
• 一個X M L解析器。
• 一個擴展的D O M一級樹狀接口。
• 一個X S LT轉換引擎。
XT XSL處理器X T是另一種流行的X S LT處理器;由James Clark組寫,易于使用并且可以
從作者的主頁上自由下載,網址是: h t t p : / / w w w. j c l a r k . c o m / x m l / x t . h t m l。它使用J a v a編寫,并且
已經在幾種J a v a虛擬機上被成功地測試。對于Wi n 3 2平臺,可以下載一個單一的執行碼,并且它
要求在機器上安裝了M i c r o s o f t的J a v a虛擬機。這個處理器將有助于實驗這一章中所介紹的不同
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(107)