多分支

一、<xsl:choose>多分支條件

語法結構(類似 if … else if … else
<xsl:choose>
    <xsl:when test="條件運算式">
        條件成立時輸出內容
    </xsl:when>
    <xsl:when test="條件運算式2">
        條件2成立時輸出內容
    </xsl:when>
    <xsl:otherwise>
        所有when條件皆不滿足時輸出(可選)
    </xsl:otherwise>
</xsl:choose>Code language: HTML, XML (xml)
  1. 由上往下比對,匹配到第一個符合的 <xsl:when> 就會停止執行
  2. <xsl:otherwise> 只能放在全部 <xsl:when> 的後面;
  3. 運算式內 > 要寫成 &gt;< 要寫成 &lt;
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head></head>
<body>
<ul>
    <!-- 遍歷所有學生 -->
    <xsl:for-each select="class/student">
        <!-- 依照年齡升序排序 -->
        <xsl:sort select="age"/>
        <!-- 篩選身高大於160的學生 -->
        <xsl:if test="height &gt; 160">
            <li>
                <xsl:value-of select="name"/><!-- 多重判斷:身高>200時年齡加粗顯示 -->
                <xsl:choose>
                    <xsl:when test="height &gt; 200">
                        <b><xsl:value-of select="age"/></b>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of select="age"/>
                    </xsl:otherwise>
                </xsl:choose>
            </li>
        </xsl:if>
    </xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>Code language: HTML, XML (xml)

執行邏輯:遍歷→依照年齡排序→篩選身高>160→身高超過200則年齡加粗顯示。

二、瀏覽器端XSLT轉換方案

並非所有瀏覽器都支援XSLT,可以透過下面的方式處理。現在大多數人使用Chrome、Firefox,這個問題已經很少見,但建議讀者有所認識。

1:JavaScript 用戶端轉換(舊版IE方案)

原理:頁面載入JS,讀取XML檔案與XSL樣式表,在瀏覽器內完成轉換並輸出HTML。

// 載入XML
var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.load("cdcatalog.xml");
// 載入XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM");
xsl.async = false;
xsl.load("cdcatalog.xsl");
// 轉換輸出
document.write(xml.transformNode(xsl));Code language: JavaScript (javascript)
  1. ActiveXObject 僅舊版IE瀏覽器支援,現代Chrome、Firefox無法相容;
  2. 仰賴瀏覽器內建XML解析器,相容性不佳。
2:伺服器端轉換

核心思路:不要在瀏覽器執行轉換

目前多數專案採用此方式,在伺服器端完成轉換,就不會有瀏覽器相容問題,多數企業實務也是這樣做。

  1. 後端(Java/PHP/.NET等)使用XSLT引擎,將XML + XSL預先轉換成XHTML;
  2. 直接把產生好的HTML頁面回傳給瀏覽器;
  3. 優點:相容全部瀏覽器,用戶端瀏覽器不需要支援XSLT。

三、XPath 基礎觀念

XPath 是XML文件路徑查詢語言,是XSLT的核心基礎。

  1. 透過路徑運算式定位XML節點(概念類似檔案路徑);
  2. 具備內建標準函式庫,支援數值運算、字串處理;
  3. 屬於W3C官方標準;
  4. 所有寫在 select=""test="" 當中的運算式,都屬於XPath語法。

總結

標籤適用場景分支特性
<xsl:if>單一條件判斷僅成立分支,沒有else
<xsl:choose>多條件分支判斷多組when + otherwise(對應else)

多分支

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *