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樣式的要求。表 一 運算子與特殊字元 運算子描述選擇子元素,返回左側元素的直接子元素 如果 位於最左側表示選擇根結點的直接子元素 遞迴下降,不論深度,搜尋指定的元素 如果位於最左側表示從根結點出發遞迴下降搜尋指定元素 表示當前元素 萬用字元,...