多分支

一、<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→身高超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)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注