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