複数分岐

一、<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相当)

複数分岐

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です