
本文介绍在 XSLT 1.0 中借助 EXSLT 字符串扩展函数 str:split(),将形如 "Line1 | Line 2| Line3" 的竖线分隔字符串拆分为多行 HTML 输出,并确保每项独占一行。适用于 Xalan 等支持 EXSLT 扩展的处理器。
本文介绍在 xslt 1.0 中借助 exslt 字符串扩展函数 `str:split()`,将形如 `"line1 | line 2| line3"` 的竖线分隔字符串拆分为多行 html 输出,并确保每项独占一行。适用于 xalan 等支持 exslt 扩展的处理器。
在标准 XSLT 1.0 中,原生不支持字符串分割(如 JavaScript 的 split()),但可通过 EXSLT(Extensible Stylesheet Language Transformations)提供的扩展函数实现。其中 str:split() 是最直接、可靠的解决方案——它能将指定分隔符(如 |)分隔的字符串解析为节点集,从而支持 <for-each></for-each> 遍历。
以下是一个完整、可运行的 XSLT 示例:
<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(normalize-space($passId), '|')">
<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, '|')返回由各子字符串构成的伪节点集(每个.代表一个分割项); - 使用
normalize-space()清除首尾空格及多余空白(如" Line 2 "→"Line 2"),提升输出整洁度; -
<br>确保每项后换行,符合 HTML 渲染要求。
⚠️ 注意事项:
- 此方案依赖处理器对 EXSLT 的支持。Xalan、Saxon 6.x 及部分旧版 libxslt 默认兼容;现代 Saxon PE/EE 支持更完善的
fn:tokenize()(XSLT 2.0+),但若受限于 XSLT 1.0 环境,EXSLT 是首选; - 若无法启用扩展(如安全策略禁用),需改用递归模板手动实现分割(复杂度高,易出错),不推荐作为默认方案;
- 分隔符若含特殊字符(如
/,[,]),需注意转义——str:split()对普通 ASCII 分隔符(如|,,,;)无需额外处理。
综上,利用 str:split() 是 XSLT 1.0 下高效、简洁且工业级可用的字符串拆分方案,特别适合处理参数化输入中的结构化文本。

















