
本文介绍如何在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扩展函数库中的 str:split() 实现高效、简洁的分隔处理。该方案广泛支持于Xalan、Saxon(启用扩展时)等主流处理器。
以下是一个完整、可直接运行的XSLT示例:
<stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:str="http://exslt.org/strings" extension-element-prefixes="str"><param name="passId" select="'Line1 | Line 2| Line3'"> <template match="/"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <for-each select="str:split(normalize-space($passId), '|')"><variable name="item" select="normalize-space(.)"></variable><if test="$item != ''"><value-of select="$item"></value-of><br></if></for-each></template></stylesheet>
✅ 关键说明:
-
str:split($passId, '|')将字符串按|拆分为节点集,每个子项作为当前上下文(.); -
normalize-space()清除首尾空格并压缩内部多余空白,避免因"Line1 | Line 2"中空格导致输出含冗余空行; -
<if test="$item != ''"></if>过滤空项(例如"a||b"可能产生空字符串),提升健壮性; -
<br>确保浏览器中视觉换行(若需语义化结构,可替换为<p></p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill9263" title="Html2md"><img src="https://img.php.cn/upload/skill/000/000/081/179249945220127.jpg" alt="Html2md" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill9263" title="Html2md" class="overflowclass">Html2md</a> <p class="overflowclass">使用 Readability + Turndown 将 HTML 页面转换为干净的、Agent 友好的 Markdown。去除导航栏、广告、页脚、Cookie 横幅、社交按钮等干扰元素。支持 URL...</p> </div> <a rel="nofollow" href="/xiazai/skill9263" title="Html2md" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>或<div>)。<p>⚠️ <strong>注意事项:</strong> </p> <ul> <li>使用前需确认XSLT处理器已启用EXSLT支持(Xalan默认支持;Saxon PE/EE需显式配置); </li> <li>若无法使用扩展函数(如受限于纯标准环境),可采用递归模板实现手动分割,但代码更复杂、可维护性较低; </li> <li>XSLT 2.0+ 用户应优先使用原生 <code>tokenize($passId, '\|'),无需依赖命名空间,且正则更灵活(注意转义竖线)。
综上,借助 str:split 是XSLT 1.0中最简洁、可靠、可读性强的解决方案,适用于参数化动态内容渲染场景。










