如何通过XSLT将TEI中带break='no'的<lb>转为无空格|分隔形式
解决TEI转HTML时
<lb break="no"/>前后空格统一问题 要让两种TEI场景Gio <lb n="2" break="no"/>vanni和Gio<lb n="2" break="no"/>vanni都输出Gio|vanni,核心是自动清理<lb break="no"/>前的多余空格,同时保留原文档的其他格式。可以通过以下XSLT模板实现:
核心XSLT代码
<!-- 匹配后面紧跟lb[break='no']的文本节点,修剪末尾空格 --> <xsl:template match="text()[following-sibling::node()[1][self::lb[@break='no']]]"> <xsl:value-of select="replace(., '\s+$', '')"/> </xsl:template> <!-- 匹配break="no"的lb标签,替换为| --> <xsl:template match="lb[@break='no']"> <xsl:text>|</xsl:text> </xsl:template> <!-- 保留其他lb标签的默认处理(比如break="yes"的换行) --> <xsl:template match="lb[not(@break='no')]"> <br/> </xsl:template>
逻辑说明
- 第一个模板专门处理**后面紧跟
<lb break="no"/>**的文本节点:用replace(., '\s+$', '')去掉文本末尾的所有空白字符(空格、制表符、换行都包含),确保Gio变成Gio。 - 第二个模板把所有
<lb break="no"/>直接替换成|,不管前面有没有空格。 - 第三个模板保留普通
<lb>(比如带break="yes"或无break属性的)的换行功能,输出HTML的<br/>。
VS Code使用步骤
- 把上述模板添加到你的现有XSLT样式表中,确保模板优先级正确(如果有其他
<lb>处理模板,调整匹配规则避免冲突)。 - 安装VS Code的XSLT Transformer插件,右键TEI文档选择
Transform with XSLT,选择你的样式表生成HTML。 - 用Live Server插件打开生成的HTML文件,即可看到统一的
Gio|vanni输出。
内容的提问来源于stack exchange,提问作者fischiola
相关产品推荐
相关产品推荐

