xsl:if用于单条件判断,仅当test属性的XPath表达式为true时执行内容,不支持else;xsl:choose支持多分支条件逻辑。

在XSLT中,xsl:if 和 xsl:choose 是实现条件逻辑的核心元素,用于根据XML数据的值动态控制输出内容。它们不改变原始XML,只影响样式表如何转换它。
用 xsl:if 进行简单条件判断
xsl:if 适用于单条件判断,语法简洁,但不支持“否则”分支。它通过 test 属性指定布尔表达式,仅当结果为 true 时执行其中的内容。
- 表达式可使用 XPath:如
@status = 'active'(检查属性)、price > 100(数值比较)、string-length(name) > 0(字符串函数) - 注意:不能写成
—— xsl:else 不存在,这是常见误区... ... - 若需“否则”逻辑,必须配合 xsl:choose 使用
用 xsl:choose 实现多分支选择
xsl:choose 类似编程语言中的 switch 或 if-else if-else 结构,由 xsl:when(可多个)和可选的 xsl:otherwise 组成,按顺序匹配,遇到第一个为 true 的 test 就执行对应分支,其余跳过。
- 每个 xsl:when 必须有 test 属性;xsl:otherwise 不需要 test,且最多出现一次,放在最后作为兜底
- 示例场景:按订单金额分级显示标签:
、VIP客户 、优质客户 普通客户 - 注意:test 表达式中涉及空值时,XPath 会自动转为 false,建议用
normalize-space(.) != ''显式判断非空文本
嵌套与实际使用建议
两者可相互嵌套,但应避免过深嵌套影响可读性。优先用 xsl:choose 处理互斥多选,用 xsl:if 处理独立开关型逻辑(如是否显示某个可选字段)。
- 在模板中,常配合 xsl:for-each 使用:例如遍历商品列表,对每项用 xsl:if 过滤出库存 > 0 的商品再输出
- test 中引用变量需加
$前缀,如test="$priority = 'high'";引用参数用param元素声明后同理 - 调试技巧:临时用
输出 test 表达式的计算结果,确认逻辑是否符合预期










