跟我學XSL(五)

2021-04-02 01:30:29 字數 2585 閱讀 8785

xsl中的choose

上期我們學習了xsl元素< xsl:if >,已能通過測試xml資料的值來決定不同的輸出形式(不知你嘗試過沒有,實際上< xsl:for-each >也可部分實現< xsl:if >的功能),但有時,我們希望對同一資料同時測試多個條件,根據不同條件輸出相應結果。當然,我們可以用if,假如我們只有if可用的話。幸好我們有乙個更好的選擇,那就是用< xsl:choose >。下面介紹相關元素的語法: 

< xsl:choose >

語法:< xsl:choose >

屬性:無,表示乙個多選測試的開始 

< xsl:when >

語法: 

< xsl:when expr="script-expression" language="language-name" test="pattern" >

屬性: 

expr ── 指令碼語言表示式,計算結果為「真」或「假」;如果結果為「真」,且通過test,則在輸出中顯示其中內容(可省略此項屬性)。 

language ── expr屬性中表示式的指令碼語言型別,其取值與html標記script的language屬性的取值相同,預設為「jscript」。 

test ── 源資料測試條件。 

< xsl:otherwise >

語法:< xsl:otherwise >

屬性:無,在乙個多選測試中,如果沒有不滿足< xsl:when >規定的條件,如果在最後有此標記,則輸出此標記中的內容。

示例:此處以學生成績單為例,要求按成績的高低給出優秀( >85)、一般(70~85)、起格(60~69)、不及格(< 60),而不是顯示分數。其中成績單的xml文件(檔名:grade.xml)如下: 

< ?xml version="1.0" encoding="gb2312"? >

< ?xml:stylesheet type="text/xsl" href="grade.xsl"? >

< document >

< grade >

< name >大胖< /name >< english >80< /english >

< math >90< /math >< chymest >90< /chymest >

< /grade >

< grade >

< name >小花< /name >< english >98< /english >

< math >70< /math >< chymest >85< /chymest >

< /grade >

< /document >

為實現按分數分等級顯示,其xsl文件(檔名:grade.xsl)內容如下: 

< head >< title >成績單< /title >< /head >

< /html >

< /xsl:template >

< xsl:template match="document" >

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

< th >姓名< /th > < th >英語< /th >< th >數學< /th >< th >化學< /th >

< /table >

< /xsl:template >

< xsl:template match="grade" >

< tr >

< /tr >

< /xsl:template >

< xsl:template match="name" >< xsl:value-of/ >< /xsl:template >

< xsl:template match="english|math|chymest" >

< xsl:choose >

< xsl:when test=".[value() $gt$ 85]" >優秀< /xsl:when >

< xsl:when test=".[value() $gt$ 70]" >一般< /xsl:when >

< xsl:when test=".[value() $gt$ 60]" >起格< /xsl:when >

< xsl:otherwise >不起格< /xsl:otherwise >

< /xsl:choose >

< /xsl:template >

< /xsl:stylesheet >

說明:在< xsl:choose >選擇中,從第乙個< xsl:when >開始,逐個測試,直到滿足乙個測試條件就將其中的內容輸出,不再測試後面的條件;如果不滿足任何乙個條件,則輸出< xsl:otherwise >中的內容。

標記對< xsl:when >< /xsl:when >與< xsl:otherwise >< /xsl:otherwise >中可巢狀< xsl:if >或< xsl:choose >。

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

跟我學XSL(五)

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

跟我學XSL(五)

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

跟我學XSL(六)

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