
本文介绍如何在 xslt 1.0 中将形如 "line1 | line 2 | line3" 的竖线(|)分隔字符串,逐项拆分并渲染为 html 换行内容,适用于 xalan 等支持 exslt 扩展的处理器。
本文介绍如何在 xslt 1.0 中将形如 "line1 | line 2 | line3" 的竖线(|)分隔字符串,逐项拆分并渲染为 html 换行内容,适用于 xalan 等支持 exslt 扩展的处理器。
在标准 XSLT 1.0 中,原生不提供字符串分割函数(如 split()),但可通过 EXSLT(Extensible Stylesheet Language Transformations)扩展库实现高效、简洁的分隔处理。其中 str:split() 是最直接的解决方案,它将字符串按指定分隔符切分为节点集,便于循环输出。
以下为完整、可运行的 XSLT 示例(兼容 Xalan 处理器):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings"
extension-element-prefixes="str">
<xsl:param name="passId" select="'Line1 | Line 2| Line3'"/>
<xsl:template match="/">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<xsl:for-each select="str:split($passId, '|')">
<!-- trim whitespace from each token to handle ' Line 2' -->
<xsl:value-of select="normalize-space(.)"/>
<br/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>✅ 关键说明:
-
xmlns:str="http://exslt.org/strings"声明 EXSLT 字符串命名空间; -
extension-element-prefixes="str"启用该命名空间下的扩展函数; -
str:split($passId, '|')返回一个伪节点集(node-set),每个子项对应一个分割后的字符串; - 使用
normalize-space(.)自动去除首尾空格(如" Line 2"→"Line 2"),避免因原始输入格式导致的空白问题。
⚠️ 注意事项:
- 此方案依赖处理器对 EXSLT 的支持。Xalan、Saxon-6.x 和 libxslt 均支持
str:split;但现代 Saxon PE/EE(9+)默认不启用 EXSLT,需显式配置或改用原生tokenize()(仅 XSLT 2.0+ 支持); - 若无法使用扩展函数,可采用纯 XSLT 1.0 递归模板手动实现分割(代码更冗长,维护成本高),不推荐作为首选;
- 分隔符若含特殊字符(如
/,],[),需注意 XPath 转义,但|在str:split中无需转义。
总结:对于 XSLT 1.0 环境下常见的分隔符字符串格式化需求,EXSLT 的 str:split() 是兼顾简洁性与可靠性的最佳实践——只需三步:引入命名空间、调用分割函数、遍历输出并清理空白。

















