跟我學XSL(六)

2021-04-02 01:30:29 字數 2734 閱讀 8800

運算子、關係與邏輯運算子,特殊字元等

今天我們學習xsl的各種運算子,滿足編寫更大靈活性的xsl樣式的要求。

表一、運算子與特殊字元

運算子 描述 

/ 選擇子元素,返回左側元素的直接子元素;如果「/」位於最左側表示選擇根結點的直接子元素 

// 遞迴下降,不論深度,搜尋指定的元素;如果位於最左側表示從根結點出發遞迴下降搜尋指定元素 

. 表示當前元素 

* 萬用字元,選擇任意元素,不考慮名字 

@ 取得屬性值,作為屬性名的字首 

@* 萬用字元,選擇任意屬性,不考慮名字 

: 名字作用範圍分隔符,將名字作用範圍字首與元素或屬性名分隔開來 

!* 在相關節點上應用指定方法 

( )* 分組,明確指定優先順序 

[ ] 應用過濾樣式 

[ ]* 下標運算子,用於在集合中指示元素 

表二、邏輯運算子

比較運算子 可選方式 描述 

and $and$或 邏輯與 

or $or$或|| 邏輯或 

not() $not$ 邏輯非 

表三、關係運算子 

= $eq$ 相等 

= $ieq$ 相等(不區分大小寫) 

!= $ne$ 不等 

$ine$ 不等(不區分大小寫) 

< $lt$ 小於 

$ilt$ 小於(不區分大小寫) 

< = $le$ 小於等於 

$ile$ 小於等於(不區分大小寫) 

> $gt$ 大於 

$igt$ 大於(不區分大小寫) 

>= $ge$ 大於等於 

$ige$ 大於等於(不區分大小寫) 

$all$ 集合運算子,如果集合中所有專案均滿足條件則返回「真」 

$any$ 集合運算子,如果集合中任意專案滿足條件則返回「真」 

| 集合運算子,返回兩個集合的聯合 

示例一:

從個人簡歷中尋找具有具有「web開發」技能的人的姓名與e-mail。假設文件結構如下所示: 

< document >

< resume >

< name >name< /name >

< *** >***< /*** >

< birthday >birthday< /birthday >

< skill >skill1< /skill >

< skill >skill2< /skill2 >

… < skill >skilln< /skill >

< /resume >

< resume >

… < /resume >

… < /document >

為從以上結構的個人簡歷中尋找出所有具有「web開發」技能的人的姓名與e-mail的xsl文件結構如下: 

< table border="1" cellspacing="0" >

< th >姓名< /th >< th >e-mail< /th >

< xsl:for-each select="resume [ $any$ skill='web開發' ]" >

< tr >< td >< xsl:value-of select="name"/ >< /td >

< td >< xsl:value-of select="e-mail"/ >< /td >

< /tr >

< /xsl:for-each >

< /table >

說明: 

1.[ ] ───表示選擇條件,只有滿足條件的個人簡歷才被顯示; 

2.$any$ ──由於每個人有多種技能,故加$any$作為字首,以使每個人所有技能都能被比較; 

3.skill='web開發' ──篩選條件

示例二、

仍上面的xml文件為例,如果欲選擇1977/1/1之前出生的人的姓名、技能與e-mail,相應的xsl文件結構如下(假定生日格式為yyyy/mm/dd): 

< table border="1" cellspacing="0" >

< th >姓名< /th >< th >技能< /th >< th >e-mail< /th >

< xsl:for-each select="resume [ birthday $lt$ '1977/1/1' ]" >

< tr >

< td >< xsl:value-of select="name"/ >< /td >

< td >< xsl:value-of select="skill [0]"/ >

< xsl:for-each select="skill [index() >0]" >、 

< xsl:value-of select="."/ >

< /xsl:for-each >

< /td >

< td >< xsl:value-of select="e-mail"/ >< /td >

< /tr >

< /xsl:for-each >

< /table >

說明: 

1. birthday $lt$ '1977/1/1' ── 搜尋條件,在此處使用「< 」會錯誤,故使用「$lt$」表示小於。 

2. skill [0] ─── 表示選擇skill的第一項 

3. skill [index() >0]───表示選擇skill的第二項以後(包括第二項)的專案 

4. xsl:value-of select="." ─── 表示選擇當前標記的值

注:如果拷貝源**,請將空格刪除 

跟我學XSL(六)

今天我們學習xsl的各種運算子,滿足編寫更大靈活性的xsl樣式的要求。表 一 運算子與特殊字元 運算子描述選擇子元素,返回左側元素的直接子元素 如果 位於最左側表示選擇根結點的直接子元素 遞迴下降,不論深度,搜尋指定的元素 如果位於最左側表示從根結點出發遞迴下降搜尋指定元素 表示當前元素 萬用字元,...

跟我學XSL 六

這課學習xsl的函式 一 end 含義 返回集合中最後一個元素。示例 輸出最後一份簡歷 假定xml檔案格式為 resume resume resume resume 相應xsl檔案內容為 xsl for each select resume end xsl for each 或 xsl templa...

跟我學XSL(二)

xsl入門 上期我們講到用css 層疊樣式表 來格式化xml文件,其效果並不很令人滿意。實際上css用來格式化html標記比較合適些,只是因為它簡單才在上例中採用。xml在更多的時候只是一種資料檔案,怎樣將它變為我們日常所看到的html格式那樣的檔案呢?如果我們將xml檔案比作結構化的原料的話,那麼...

跟我學XSL(三)

xsl模板與匹配模式 經過前幾日的學習,我們學習了xhtml文件的編寫和以及三個xsl元素,已能編寫相當靈活的xsl文件,今天將學習的是xsl模板的編寫。我們都知道,短的文件 程式十分好讀,但當規模增大後,其複雜性也以更快的速度增加。前面我們學了 xsl for each xsl value of ...

跟我學XSL(五)

xsl中的choose 上期我們學習了xsl元素 xsl if 已能通過測試xml資料的值來決定不同的輸出形式 不知你嘗試過沒有,實際上 xsl for each 也可部分實現 xsl if 的功能 但有時,我們希望對同一資料同時測試多個條件,根據不同條件輸出相應結果。當然,我們可以用if,假如我們...