XSL 控制语句详解:if 条件判断与 choose 多分支选择
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 基础教程的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









