包括大块的 xsl

include chunk of xsl

我有一大块 XSL 代码(连同 Apache fop),我想重用它们:

使用的 XSL 版本和架构

<xsl:stylesheet version="3.0" xml:lang="en"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format"
    xmlns:exsl="http://exslt.org/common"
    xmlns:java="http://xml.apache.org/xslt/java"
    exclude-result-prefixes="java"      
    xmlns:map="xalan://java.util.HashMap" extension-element-prefixes="map">

要重用的块:

    <xsl:choose>
        <xsl:when test="map:get($etiquetas,'datosMensajeLabel')" />

        <fo:table-cell padding="2pt" border-top-color="black"
            border-top-width="0.5pt" border-top-style="solid"
            background-color="grey">
            <fo:block text-align="start" color="white" font-size="12pt">
                <xsl:value-of
                    select="map:put($etiquetas,'datosMensajeLabel','')" />
                <xsl:value-of
                    select="map:get($etiquetas,'datosMensajeLabel')" />
            </fo:block>
        </fo:table-cell>
    </xsl:choose>
    <xsl:otherwhise>

        <fo:table-cell padding="2pt" background-color="grey">
            <fo:block text-align="start" color="white" font-size="12pt">
                
                <xsl:value-of
                    select="map:get($etiquetas,'datosMensajeLabel')" />
            </fo:block>
        </fo:table-cell>
    </xsl:otherwhise>

到目前为止我试过了:

  1. 声明并使用命名的 模板:它失败了,因为 table-cell 破坏了声明模板的 Apache fop 模式
  2. 将那段代码放在另一个文件中并使用 importinclude:它没有用,因为它没有用作子项共 xsl:stylesheet

您收到错误 fo:table-cell not allowed in that position 的原因是前面的 xsl:when 元素已关闭,因此不包装 元素。

xsl:choose 只允许 xsl:when 或 xsl:otherwise 作为直接子节点,因此在找到 时会抱怨。

周围环绕 xsl:when 应该可以消除错误消息。

顺便说一句,你拼错了xsl:otherwise