You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT3.0中xsl:template匹配DocBook title标签未生效问题

问题产生原因
  • 你导入的是DocBook XSLT NG(基于XSLT 3.0实现的新版DocBook转换样式表),它的标题处理逻辑和传统DocBook XSLT存在本质差异:db:title节点不会在m:docbook模式下被直接执行apply-templates调用。
  • XSLT NG在处理章节、部分、书籍等层级结构时,会提前预抽取对应节点下的db:title内容,生成外层<header>标签、章节编号、层级标题标签(h1/h2等)的整体结构,抽取到的标题文本会走专门的标题处理流程,完全绕过你写的m:docbook模式下的db:title匹配模板。而db:ulink属于正文行内元素,确实在m:docbook模式下被处理,所以你的ulink自定义模板可以正常生效。
  • 你写的title模板本身还存在语法错误:<xsl:variable name="header" select="@role"/>-->末尾多了多余的-->注释闭合标记,即使匹配模式正确,加载样式表时也会抛出编译错误。
调整方法
  • 首先删除title模板里多余的-->错误字符,修复语法问题。
  • 不要在m:docbook模式下匹配db:title,使用XSLT NG预留的标题内容扩展模式m:title-content编写自定义模板,所有层级的标题文本渲染都会经过这个模式,你的自定义逻辑可以正常命中。
  • 修正后的title自定义模板示例:
<xsl:template match="db:title" mode="m:title-content">
    <xsl:variable name="headerRole" select="@role"/>
    <xsl:variable name="titleText" select="normalize-space(.)"/>
    <!-- 在此处编写你的自定义标题渲染逻辑,以下为示例 -->
    <span class="custom-title" data-role="{$headerRole}">
        <xsl:value-of select="$titleText"/>
    </span>
</xsl:template>
  • 如果你需要修改标题外层的标题标签(h1/h2等)、调整章节编号/标签的生成逻辑,需要对应覆盖XSLT NG里m:book-title、m:part-title、m:chapter-title、m:section-title等对应层级的标题生成模板,不要直接匹配原始XML里的db:title节点。

内容的提问来源于stack exchange,提问作者SMt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:48:20