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

如何在XSLT中实现匹配<info>标签时自动分页?

在XSLT(XSL-FO)中实现标签分页显示的正确方法

你使用的break-before="page"属性是正确的,但当前代码的问题在于,带有分页属性的<fo:block>没有包裹住<info>标签的内容,导致分页规则无法生效。

修正后的核心模板写法

将<xsl:apply-templates>放到带有分页属性的<fo:block>内部,确保<info>的所有内容都受分页规则影响:

<xsl:template match="catalog/info">
    <fo:block break-before="page">
        <xsl:apply-templates/>
    </fo:block>
</xsl:template>

完整可运行的XSLT示例

要让分页正常工作,还需要构建完整的XSL-FO文档结构(包含页面布局、页面序列等必要定义),以下是适配你XML的完整代码:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:output method="xml" indent="yes"/>

    <!-- 处理根节点,生成FO文档框架 -->
    <xsl:template match="/">
        <fo:root>
            <!-- 定义A4页面布局 -->
            <fo:layout-master-set>
                <fo:simple-page-master master-name="default-page" page-width="210mm" page-height="297mm">
                    <fo:region-body margin="20mm"/>
                </fo:simple-page-master>
            </fo:layout-master-set>

            <!-- 页面序列,关联布局模板 -->
            <fo:page-sequence master-reference="default-page">
                <fo:flow flow-name="xsl-region-body">
                    <!-- 遍历处理所有cd和info节点 -->
                    <xsl:apply-templates select="catalog/cd | catalog/info"/>
                </fo:flow>
            </fo:page-sequence>
        </fo:root>
    </xsl:template>

    <!-- 渲染cd节点内容 -->
    <xsl:template match="cd">
        <fo:block margin-bottom="10mm">
            <fo:block font-weight="bold">标题: <xsl:value-of select="title"/></fo:block>
            <fo:block>艺术家: <xsl:value-of select="artist"/></fo:block>
            <fo:block>国家: <xsl:value-of select="country"/></fo:block>
        </fo:block>
    </xsl:template>

    <!-- 带分页的info节点渲染模板 -->
    <xsl:template match="catalog/info">
        <fo:block break-before="page">
            <fo:block font-weight="bold" font-size="14pt">专辑信息</fo:block>
            <fo:block>发行公司: <xsl:value-of select="company"/></fo:block>
            <fo:block>价格: <xsl:value-of select="price"/></fo:block>
            <fo:block>年份: <xsl:value-of select="year"/></fo:block>
        </fo:block>
    </xsl:template>
</xsl:stylesheet>

关键说明

  • break-before="page":该属性会指示XSL-FO处理器在当前块之前插入分页符,确保<info>内容从新页面开始。
  • 必须将<info>的内容(或<xsl:apply-templates>)包裹在带有分页属性的<fo:block>中,否则分页规则不会作用于目标内容。
  • 完整的XSL-FO结构是分页生效的前提,处理器需要依赖页面布局、页面序列等定义来生成正确的分页文档。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:40:33