XSL 控制语句详解:if 条件判断与 choose 多分支选择

雨后青山
雨后青山
发布时间:2026-10-16| 8人浏览过
原创

XSL(可扩展样式表语言)不仅用于样式化 XML 文档,还提供类似编程语言的逻辑控制功能。本文详细讲解如何通过 xsl:if 实现单条件判断,以及使用 xsl:choose 处理多分支逻辑,帮助开发者根据数据内容动态生成 HTML 结构。

结果或目标

在将 XML 数据转换为 HTML 表格时,我们通常需要根据特定字段的内容做出决策。例如:

1. 仅显示符合特定条件的记录(如只显示特定艺术家的 CD)。
2. 根据数据值应用不同的样式(如为特定艺术家标记不同背景色)。

准备条件

你需要以下基础知识与环境:

- 基本的 XML 数据结构。
- 一个 XSLT 处理器(如浏览器、XSLT 引擎)。
- 理解 xsl:template 和 xsl:value-of 的基本用法。

真实操作顺序

第 1 步:使用 xsl:if 进行条件过滤

目的:仅当满足特定条件时,才输出一段内容或执行某操作。适用于简单的“是/否”判断。

语法结构:

<xsl:if test="条件表达式">
  <!-- 如果条件为真,则输出以下内容 -->
</xsl:if>

注意:早期 W3C 草案中曾使用 match 属性,但在标准 XSLT 1.0/2.0 中,应使用 test 属性。下面演示标准写法。

应用场景:在一个 CD 目录中,只筛选出艺术家为 "Bob Dylan" 的记录。

完整代码示例:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" indent="yes"/>

<xsl:template match="/">
  <html>
  <body>
    <h2>CD 目录 (仅 Bob Dylan)</h2>
    <table border="1" bgcolor="#ffffcc">
      <tr>
        <th>Title</th>
        <th>Artist</th>
      </tr>
      <xsl:for-each select="CATALOG/CD">
        <xsl:if test="ARTIST='Bob Dylan'">
          <tr>
            <td><xsl:value-of select="TITLE"/></td>
            <td><xsl:value-of select="ARTIST"/></td>
          </tr>
        </xsl:if>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

说明:
- <xsl:for-each select="CATALOG/CD"> 遍历所有 CD 节点。
- <xsl:if test="ARTIST='Bob Dylan'"> 检查当前节点的 ARTIST 字段是否为 'Bob Dylan'。
- 只有条件成立时,才会渲染 <tr> 行。

第 2 步:使用 xsl:choose 处理多分支选择

目的:当有多个互斥条件需要判断时,类似于编程中的 switch/if-else-if-else 结构。

语法结构:

<xsl:choose>
  <xsl:when test="条件1">
    <!-- 条件1 成立时执行 -->
  </xsl:when>
  <xsl:when test="条件2">
    <!-- 条件2 成立时执行 -->
  </xsl:when>
  <xsl:otherwise>
    <!-- 所有条件都不成立时执行 -->
  </xsl:otherwise>
</xsl:choose>

应用场景:遍历 CD 列表,如果艺术家是 "Bob Dylan",则将其名字用红色高亮显示;否则正常显示。

完整代码示例:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" indent="yes"/>

<xsl:template match="/">
  <html>
  <body>
    <h2>CD 目录 (特殊标记)</h2>
    <table border="1">
      <tr>
        <th>Title</th>
        <th>Artist</th>
      </tr>
      <xsl:for-each select="CATALOG/CD">
        <tr>
          <td><xsl:value-of select="TITLE"/></td>
          <td>
            <xsl:choose>
              <xsl:when test="ARTIST='Bob Dylan'">
                <font color="red"><xsl:value-of select="ARTIST"/></font>
              </xsl:when>
              <xsl:otherwise>
                <xsl:value-of select="ARTIST"/>
              </xsl:otherwise>
            </xsl:choose>
          </td>
        </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

说明:
- <xsl:choose> 开始条件块。
- <xsl:when test="..."> 定义第一个条件。
- <xsl:otherwise> 定义默认情况。
- 此结构允许在不破坏 HTML 表格结构的前提下,对单元格内容进行差异化渲染。

完成判断

你可以将上述 XML 数据文件与 XSLT 样式表文件关联,或在支持 XSLT 的环境(如现代浏览器)中直接加载 XML 并指向 XSL 文件。检查结果:\- 第一例表格是否只包含 "Bob Dylan" 的行?
- 第二例表格中 "Bob Dylan" 的名字是否变为红色,其他名字保持默认颜色?

简要总结

XSL 提供了强大的逻辑控制能力。xsl:if 适用于单一条件的筛选,而 xsl:choose 配合 xsl:when 和 xsl:otherwise 可处理复杂的多路分支逻辑。掌握这些语句能让你将静态的 XML 数据转化为具有动态交互感和条件样式的 HTML 页面。

以上就是 XSL 控制语句(if 和 choose)的详细内容,更多关于 XSL T 基础教程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。