17370845950

XSLT怎么实现if-then-else逻辑
XSLT中标准的if-then-else逻辑通过配合和实现,全版本兼容;XSLT 2.0+还支持XPath的if() then...else...表达式用于属性值模板或value-of中。

XSLT 本身没有 if-then-else 关键字,但可以通过 配合 实现等效逻辑,这是最标准、推荐的方式。

模拟 if-then-else

这是 XSLT 1.0/2.0/3.0 全版本兼容的写法,结构清晰,语义明确:


  
    高价商品
  
  
    普通商品
  

说明:

  • test 属性写 XPath 表达式,返回布尔值;为真时执行对应 内容
  • 相当于 else 分支,最多只能有一个,且必须放在所有 之后
  • 支持多个 实现多条件判断(类似 if-else if-else)

在属性值模板中用 XPath 条件表达式(XSLT 2.0+)

如果只是简单地根据条件生成一个字符串或值

(比如 class 名、文本内容),可用 XPath 的 if () then ... else ... 表达式,直接写在属性值模板或 中:

  

注意:

  • 仅适用于 XSLT 2.0 或更高版本(XSLT 1.0 不支持)
  • 必须写在大括号 {} 内(AVT,属性值模板)或 select 属性中
  • then 和 else 后面都必须有值(不能留空),否则报错

避免常见错误

实际使用中容易踩的坑:

  • 误用 :它只有“if”没有“else”,无法单独实现二选一分支;想加 else 必须套一层
  • 忘记闭合: 是自闭合标签?不是!它们必须有显式结束标签或自闭合写法(如 )仅在无内容时才允许,但通常建议写全
  • test 表达式写错:比如把 @type = 'book' 写成 type = 'book'(漏了 @ 就变成子元素匹配)

简单三元逻辑的快捷写法(XSLT 1.0 兼容)

若只是输出两个字符串之一,也可用 XPath 的 concat() + 布尔转数字技巧(不推荐用于复杂逻辑,但轻量场景够用):

不过这种写法可读性差、难维护,仅作了解;生产环境强烈建议优先用

基本上就这些。核心记牢:标准写法是 ,现代版本可选括号内 if-then-else 表达式,别硬套编程语言习惯去拼