曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
< x s l : o u t p u t >元素:
326使用XML 高級編程
下載
程序清單9 - 1 0
9.3.4 合并樣式表
一個重用代碼的方便方法是創建模塊。然后,這些模塊可以被用在其他的模塊中—X S LT
可以包含或導入外部的樣式表。有兩種命令可以達到這個效果:
• <xsl:include>元素
• <xsl:import>元素
1. xsl:include
< x s l : i n c l u d e >元素只是簡單地允許我們包含一個外部的樣式表,在定義< x s l : i n c l u d e >元素的位
置處。通過U R I所指出的X S LT文檔首先被解析,然后被包括文檔的< s t y l e s h e e t >元素的子元素替換
需要替換文檔的< x s l : i n c l u d e >元素。有必要將< x s l : i n c l u d e >命令定位成< s t y l e s h e e t >元素的子元素:
程序清單9 - 11
2. xsl:import
< x s l : i m p o r t >與< x s l : i n c l u d e >有很大不同—< x s l : i n c l u d e >只是表示執行一個文件包含,但是
< x s l : i m p o r t >修改文檔樹。實際上, < x s l : i m p o r t >命令修改模板的順序和優先處理。
最重要的是,這個元素應該放在其他頂級元素的前面—它應該是< x s l : s t y l e s h e e t >元素的第
一個子元素。
首先,所有被輸入的樣式表被當做文本被包含。一但它們都被收集完畢,將被用于生成一
棵輸入樹。所以,每一個被輸入的樣式表都被包含在宿主樣式表的輸入樹中。這就可以讓被輸
入的樣式表自己再輸入其他的樣式表。
例如,b o o k l i s t . x s l樣式表可能輸入一個像這樣的樣式表:
程序清單9 - 1 2
現在,讓n e w B o o k s . x s l輸入其他的樣式表:
程序清單9 - 1 3
第9章轉換XML使用327 下載
然后,合成的輸入樹看上去應該如圖9 - 1 0所示。
這就形成了一種命令,它指出一個樣式表可以優先于另一
個,B o o k l i s t . x s l的優先權要高于其他兩個。當模板與元素相匹
配時, B o o k l i s t . x s l首先被處理,然后是N e w B o o k s . x s l,最后是
r e c e n t . x s l。< x s l : i m p o r t >命令直接影響了樣式表的處理。X S L文
檔樹通過這個元素被修改,并且樣式表被組裝進了單一單元
—輸入樹。
9.3.5 嵌入樣式表
一個樣式表不必是一個分離的文檔。它能夠被嵌入到另一個X M L文檔中。例如,一個動態
命令的X M L文檔可能在轉換給用戶機構之前包括它的樣式表,一個X S L樣式表被嵌入到X M L文
檔中:
程序清單9 - 1 4
這里,樣式表被包含在X M L文檔中。通過一個X M L(用#號所指) i d指出,所以X S L處理器
知道樣式表是在文檔中的特殊片段,通過一個元素中的i d屬性定義的。X S L處理器將然后從文檔
中提取出樣式表片段,分析它,并且為X S L處理器命令內部命令。X M L文檔本身被解析,但是
結果的文檔樹并不包含樣式表。所以,從一個單一的X M L文檔,用戶機構得到兩個文檔命令:
• 一個用于X M L文檔的樹林,不包括< x s l : s t y l e s h e e t >元素(它包括了整個樣式表)。這個命
令可以用D O M處理。
• 一個X S L文檔,只包括< x s l : s t y l e s h e e t >元素和它的內容。這個命令可能是也可能不是一個
樹林,可能也可能不被D O M處理。
9.4 使用XSLT的例子
如你所見,X S LT是一個有力的工具,通過一種命令或文檔類型,來轉換X M L文檔為一個新
的文檔—如將一上X M L文檔翻譯成X H T M L。我們已經看過前面教給X S LT處理器如何工作的
例子,看過了一個引用部分,解釋了對于在X S LT中最常使用的元素,這一章的第二部分將看一
些例子,關于在不同的環境下使用X S LT。這些將包括:
328使用XML 高級編程
下載
圖9-10
• 命令的轉換,從一個X M L詞匯表到另一個。
• 使用循環重復處理元素—x s l : f o r- e a c h。
• 對需要處理的元素排序。
• 使用x s l : i f和x s l : c h o o s e進行條件處理。
• 創建動態文檔。
9.4.1 命令的轉換
讓我們看一個例子,是將一個X M L文件改成另一種X M L命令,不單是X H T M L。比方說,
我們需要重新排序一個同事給你的X M L文檔的元素,像下面:
程序清單9 - 1 5
情況良好,但是他也給你增加了一些調料,給你提出了一些需求:
• 文檔應該輸出到能夠通過C S S樣式表來表現X M L的瀏覽器上。
• 每一項(指書)必須作為一個塊顯示。
• 每個標題要首先顯示(在塊中)。
• 分類和代號應該顯示在同一行上,但是分類要顯示在前。
• 每塊的最后一行應該包含發行日期,接著是價格。
并且,如果不夠,他建議< C AT E G O RY >內容應該用“ C a t e g o r y :”字符串顯示,并且應該用
圓括號括起來。好,發行日期和價格也應該用一個“ -”分隔開。并且在圣代冰淇淋上加點櫻桃,
你只能使用C S S 1樣式表。這時候你可能會想這不是你過的日子。但是X S LT正等著幫助你。
那么,你需要做的第一件事情是,為了能夠用C S S來格式化文檔,要將存在的文檔命令轉化,
看上去像這樣:
第9章轉換XML使用329 下載
程序清單9 - 1 6
為了進行轉換,我們將使用下面的樣式表,稍后將學到很多的細節。它只包括了兩個模板。
這個例子可以用X T和S A X O N來執行。為了在M i c r o s o f t的I E上運行下面的模板,你需要一
個比在IE5中提供的MSXML組件更新的版本。
程序清單9 - 1 7
330使用XML 高級編程
下載
在以前的例子中我們看到,源文檔首先被轉換成一個樹林(一個內部分級命令)。在為了處
理將X S LT文檔被轉換成一種同部命令之后,接著元素進行匹配(也可能不,看例子而定)模
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(111)