曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
據內容節點作為孩子。
• 第二,我們為X S LT文檔創建了一個命令。這個可能也是一個樹林,但是它可能是任何一
種命令,而且為了模板處理和模式匹配作了優化。
• 然后,每一次我們遇到一個< x s l : a p p l y - t e m p l a t e s >元素,形成一個節點列表,使用這個列表
繼續處理。如果< x s l : a p p l y - t e m p l a t e s >元素包含一個s e l e c t屬性,從指定的X P a t h查詢中獲得
324使用XML 高級編程
下載
節點列表,另外這個節點列表將包括所有的子節點。
• 每一次遇到一個< x s l : v a l u e - o f >命令,我們從源樹中提取出一個值,根據在X P a t h表達式中
的s e l e c t屬性。
• 轉換不限于一對一的翻譯,它也允許其他新的信息內容,一對多的元素翻譯,元素的增加,
元素的刪除。
9.3 XSLT 樣式表命令
好了,我們已經看過了第一個例子,它是通過X S LT文檔來轉換一個X M L文檔變成一種新的
命令。現在,應該全面地看一下X S LT的命令是怎樣的。
從第一個例子中我們已經學了很多;不僅看到對于一個需要轉換的文檔, X S LT處理器是如何
貫穿全部的—我們看到生成其他元素這一點非常有用—也使用了X S LT元素的四個關鍵字:
• <xsl:stylesheet>
• <xsl:template>
• <xsl:apply-templates>
• <xsl:value-of>
在開始的第一個例子中,我們使用了X M L的聲明,因為樣式表是一個X M L文檔。記住x s l :
作為限定前綴應用于屬于X S LT命名空間部分的元素, < s t y l e s h e e t >元素是一個包含其他樣式表元
素的文檔元素,這就是命名空間被聲明的地方。在這個元素中
我們有三個< t e m p l a t e >元素,它被用于指定一個元素或其他節點
中,對被用于指明m a t c h的屬性應如何轉換。這個可以被看作大
部分轉換工作的主要的構建塊。< x s l : a p p l y - t e m p l a t e s >元素被用
于告訴處理器去處理當前元素的所有子元素,如果沒有指出
s e l e c t屬性時。否則,只有匹配符合選擇標準的節點被處理。最
后,x s l : v a l u e - o f元素被用于輸出一個元素內容。
這個說明在X S LT規范中定義的兩種元素。除了根元素之外,
是模板和指令。很明顯, < x s l : t e m p l a t e >是一個模板,因為在抽
象樹狀命令中,它將顯示在根元素的下面。然而< x s l : a p p l y -
t e m p l a t e s >和< x s l : v a l u e - o f >是指令,作為< t e m p l a t e >元素的孩子
顯示出來。記住一個X S LT文檔是一個X M L文檔,因為如此就可
以被轉化為一個樹狀命令。
圖9 - 9顯示了頂級元素,< 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 S LT處理器工作使用的
抽象命令就是像這樣的,有一個根和很多的頂級元素。讓我們瀏覽其中一些。
9.3.1 創建模板
在任何一個X S LT樣式表中的關鍵命令是< t e m p l a t e >元素,它使用一個m a t c h屬性,它的值是
第9章轉換XML使用325 下載
圖9-9
一個模式—或X P a t h表達式—表示應該使用哪一個節點的模板。更明確地說,任何X P a t h表
達式返回一個節點列表,與m a t c h屬性值相匹配的節點候選。然而,容易記憶的是模式是一個
X P a t h表達式,它指出對于一個節點應該應用哪一個模板。在模板里面我們可以包含元素和元素
的內容。
9.3.2 處理空白
為了幫助我們使用空白, X S L指供了兩種命令,被用作頂級元素:
• xsl:strip-space 用來除掉被選中的節點中的空白節點。
• xsl:preserve-space 保持內容中的任何空白。
1. xsl:strip-space。
當元素的名字包含一個e l e m e n t s屬性時,< x s l : s t r i p - s p a c e >元素從樹中刪除由空白組成的文本
節點。例如,下面的< x s l : s t r i p - s p a c e >元素將刪除任何< B O O K L I S T >或< I T E M >元素中的僅由空
白組成的文本節點。
所以,上面的元素告訴X S L引擎,如果元素< B O O K L I S T >和< I T E M >由空白組成,它們的文
本節點應該從樹(然而元素節點被保留)中被刪除。
2. xsl:preserve-space
同樣,如果我們想保留某種元素內容的的空白,那么包含< x s l : p r e s e r v e - s p a c e >元素。再一次
指出,e l e m e n t s屬性用于指示所有所想保留空白的元素列表。下面的例子,對于< C ATA L O G >和
< P R I C E >元素空白被保留。
9.3.3 輸出格式
<xsl:output />元素能夠被用于指示一個結果樹(盡管并不要求一個X S L處理器實現這個功能)
的輸出格式。
再一次強調,這是一個頂級元素,在正常情況下,應立即跟在< x s l : s t y l e s h e e t >元素后面。
這不是一個強制性的元素,在很多情況下, X S L引擎可能對于H T M L在某些條件下有缺省設
置:
• 結果樹的根節點應該有一個子節點。
• 根的第一個子節點應該是一個h t m l元素。
• 任何在第一個子節點前的節點應該只包含空白字符。
也可以將結果樹設成不同的格式,如x m l、h t m l或t e x t。< x s l : o u t p u t >元素的一個有趣的屬性
是e n c o d i n g屬性。這個在后面可以允許我們將某種編碼轉換成另一種X S LT引擎所支持的一種目
標編碼。例如,一個A S C I I編碼的X M L文檔可以被轉換成統一碼編碼文檔。所以,為了轉換一
個X M L文檔到一個新的使用不同編碼的X M L文檔,應該在< x s l : s t y l e s h e e t >元素后面立即包括
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(110)