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

如何避免xsltproc转换DocBook XML时重复生成HTML代码?

解决DocBook XSL转换中文本重复与渲染问题

问题根源

你遇到的重复问题,大概率是自定义<description>模板中同时使用了<xsl:value-of select="."/>和<xsl:apply-templates/>:

  • <xsl:value-of select="."/>会提取<description>下所有文本节点的内容(包括子标签里的文本)
  • <xsl:apply-templates/>会递归处理所有子节点(比如<code>),再次输出文本内容,最终导致重复

而注释掉<xsl:apply-templates/>后,子节点(如<code>)无法被DocBook默认模板处理,自然没法渲染成代码格式。


解决方案1:正确自定义<description>模板

如果需要给<description>添加自定义结构(比如外层容器),同时保留子节点的默认渲染逻辑,只需要去掉多余的<xsl:value-of>,只保留<xsl:apply-templates/>处理子节点:

<xsl:template match="description">
  <!-- 自定义外层容器 -->
  <div class="custom-description">
    <!-- 仅处理子节点,交给默认模板渲染(包括<code>) -->
    <xsl:apply-templates select="node()"/>
  </div>
</xsl:template>

解决方案2:复用默认模板逻辑

如果只是想在默认<description>处理基础上扩展(比如加额外样式),可以用<xsl:next-match/>调用默认模板,再包裹自定义结构:

<xsl:template match="description">
  <div class="description-wrapper">
    <!-- 调用DocBook默认的description模板处理逻辑 -->
    <xsl:next-match/>
  </div>
</xsl:template>

验证方法

  1. 用xsltproc重新转换XML:
    xsltproc --output output.html your-custom.xsl your-docbook.xml
    
  2. 查看生成的HTML:
    • <description>内的文本无重复
    • <code>标签会被渲染成<code>或<pre>格式(取决于DocBook默认模板配置)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 18:12:27