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

如何使用XSL-FO格式化文本节点内的子节点?

问题分析与解决方案

核心问题

  1. 重复输出link内容:原<text>模板中,<xsl:value-of select="."/>会提取该节点下所有文本内容(包括<link>里的文本),之后又调用<xsl:apply-templates select="link"/>再次处理link节点,导致link内容无格式显示一次,末尾又重复显示格式化后的版本。
  2. link模板取值错误:<xsl:value-of select="whatever"/>是无效写法,应该用select="."来获取<link>节点自身的文本内容。
  3. 换行不生效:直接输出&#10;在XSL-FO中可能无法被正确解析,需结合FO的布局元素实现换行。

修正后的XSL代码

<xsl:template match="text">
    <fo:block>
        <xsl:apply-templates/>
        <xsl:text>&#10;</xsl:text>
    </fo:block>
</xsl:template>

<xsl:template match="link">
    <fo:basic-link color="red" text-decoration="underline" external-destination="{@href}">
        <xsl:value-of select="."/>
    </fo:basic-link>
</xsl:template>

改动说明

  • <text>模板:移除<xsl:value-of select="."/>,改用<xsl:apply-templates/>,这样会按原文档顺序处理<text>下的所有子节点(普通文本和<link>);用<fo:block>包裹内容,确保FO能正确识别块级元素,同时添加&#10;实现末尾换行。
  • <link>模板:将<xsl:value-of select="whatever"/>改为<xsl:value-of select="."/>,正确获取link的文本内容;external-destination="{@href}"假设你的<link>节点有href属性存储链接地址,若实际属性名不同,替换为对应名称即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 19:27:48