一、XSL模板的使用 XSL在輸出模板中描述輸出格式,這些格式可以是各種字符串、標簽符號、節點值或者是一些XSL語法結構,如條件判斷、循環處理等。在許多應用場合中,輸出模板中需要使用節點的取值,此時可以根據需要使用
元素輸出節點值,最直接的使用方式是,這樣可以輸出當前節點及其所有後繼節點的取值。而如果僅僅是想輸出指定節點的取值,可以利用select屬性進行限定(select屬性可以是任意合法的路徑表達式): 上述第一個表達式匹配的對象是當前節點的所有子節點中名稱為的元素,第二個表達式匹配的對象則是當前節點中所有後繼節點中名為的元素。注意: 在XSL樣式單中必須有一個模板規則與根元素相匹配。 在確定了模板規則與元素相匹配之後,就可以激活模板,這項任務由元素完成。它和元素相結合就如同編程中的函數調用:前者是調用指令,而後者就是函數體。對於不同的元素需要調用不同的模板進行處理。為了激活樣式單中的模板規則,要在根元素模板規則中使用元素,這樣就會層層作用使整個樣式單文件生效: 直接使用元素表示不加區分地對當前節點的所有子節點應用模板,而在select屬性中書寫匹配式則能夠限定作用對象:
上述第一個模板與XML文檔的根元素相匹配,並對根節點以下的所有元素應用模板規則。然後,一旦遇到標簽,就插入一個
標簽作為空白段落,接著對元素和元素分別應用模板規則。最後,經過轉換顯示的結果是36磅字體的職員名字和用斜體字表示的職員薪水。 二、XSL的擴展規則 1. 路徑指示符 除了前面介紹的“//”和“/”路徑指示符,以及統配符“*”,還有幾個符號可以用來對模板的匹配對象進行限制: ● 當前節點指示符為“.”; ● 父節點指示符為“..”; ● 屬性指示符為“@”。 上述“@”表示對指定元素中的某個屬性進行匹配,如語句表示對元素中的屬性應用模板規則。 2. 過濾匹配符 除了路徑指示符之外,還可以對作用對象進行條件過濾或是排序,以進一步調整應用效果。過濾時,一般是以子元素(或屬性)是否存在(或其取值)為標准: ● 子元素存在:即//Employee[Salary]存在,選擇含有子元素的所有元素; ● 子元素取值:即Employee[Salary > 25000],選擇含有子元素,且Salary取值大於25000的所有元素; ● 屬性存在: 即Employee[@ID]存在,選擇含有屬性的元素; ● 屬性取值: 即Employee[@ID =“1234”],選擇所有屬性ID值為1234的元素。 3. 其他擴展過濾 其他的一些附加功能的過濾符,按功能分為:比較操作符、布爾操作符和集合索引。 比較操作符的書寫格式和功能如下所示: 操作符 功能 $eq$ 等於 $ne$ 不等 $lt$ 小於 $le$ 小於或等於 $gt$ 大於 $ge$ 大於或等於 需要說明的是:表格中的操作符在比較字符時對大小寫是敏感的,如果要忽略大小寫的不同含義,在每個操作符前面加上前綴字母“i”即可,如“$IEq”。 布爾操作符書寫格式和功能說明如下: 操作符 功能 $and$ 邏輯與 $or$ 邏輯或 $not$ 取非 對過濾的結果可以通過集合索引進行再過濾。例如,Employee[Salary][2]就是選擇第2個含有子元素的所有元素。此外,XSL還提供了集合索引函數供用戶使用:index方法表示過濾結果的索引號,end方法表示最後一個過濾結果。使用方法如下所示: Employee[index() $lt$ 2] Employee[end()] 上述第一個表達式的選擇結果是元素的第1和第2個子元素,第二個表達式的選擇結果是元素的最後一個子元素。在缺省狀態下,模板規則對元素的匹配順序是按照節點在XML文檔中出現的前後次序排定的。但在特定的應用場合中,可能需要對原有的順序進行調整,此時需要使用order-by屬性。使用方法如下所示: 上述第一個例子表示應按姓名的字母升序排列,比如“Bob”應當排在“Tom”之前,而第二個例子則表示按照薪水的多少對職員進行排序。