使用xsl:import而不是xsl:include时的TransformerException

时间:2017-09-05 08:43:28

标签: xml xslt xalan

当我导入另一个模板时,我遇到了XSLT / XSL-FO模板的问题:

主模板如下所示:

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

<xsl:import href="../BAUSTEINE/KopfUndFussteil.xsl" />

<xsl:template match="documentData">
  <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
      <!-- Seitendefinition -->
      <fo:simple-page-master page-height="297mm" page-width="210mm"
          margin="5mm 25mm 5mm 25mm" master-name="PageMaster">

        <fo:region-body margin-top="4cm" margin-bottom="4cm" margin-left="1cm" margin-right="1cm"/>

        <fo:region-before extent="1cm"/>

        <fo:region-after extent="1cm"/>
      </fo:simple-page-master>
    </fo:layout-master-set>

    <fo:page-sequence master-reference="PageMaster">

     <fo:static-content flow-name="xsl-region-before">
        <xsl:call-template name="kopf_statisch" />
     </fo:static-content>

     <fo:static-content flow-name="xsl-region-after">
        <xsl:call-template name="fussteil" />
     </fo:static-content>

     <fo:flow flow-name="xsl-region-body" >
        <xsl:call-template name="body" />
     </fo:flow>
    </fo:page-sequence>
  </fo:root>
</xsl:template>

<xsl:template name="kopf_statisch">
    <fo:block></fo:block>
</xsl:template>

<xsl:template name="fussteil">
    <fo:block>
        <xsl:call-template name="KopfUndFussteilEUFZ" />
    </fo:block>
</xsl:template>

<xsl:template name="body">
    <fo:block>Body</fo:block>
</xsl:template>

正如您所看到的,我将模板划分为子模板(此示例在此处缩减为最小值)。在所谓的“fussteil”(页脚)中,我调用了一个应该从“KopfUndFussteil.xsl”导入的模板。那个看起来像这样:

<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version="2.0" xmlns:fo="http://www.w3.org/1999/XSL/Format"
                              xmlns:xsl="http://www.w3.org/1999/XSL/Transform"    >


<xsl:template name="KopfUndFussteilEUFZ">
    Block2
</xsl:template>

</xsl:stylesheet>

非常容易。当我使用

包含子模板时
<xsl:include href="../BAUSTEINE/KopfUndFussteil.xsl" />

一切正常 - 没有错误发生,“Block2” - 文本呈现为目标PDF

但是,当我使用

<xsl:import href="../BAUSTEINE/KopfUndFussteil.xsl" />

我收到以下错误:

javax.xml.transform.TransformerException: ElemTemplateElement-Fehler: KopfUndFussteilEUFZ

那么,有没有人有一个想法是什么导入语句的问题?我正在使用Xalan 2.7.2

提前致谢!的Heiko

1 个答案:

答案 0 :(得分:2)

请参阅https://www.w3.org/TR/xslt#import,&#34; xsl:import元素子元素必须位于xsl:stylesheet元素的所有其他元素子元素之前&#34;所以尝试在任何其他子元素之前移动xsl:import。此外,Xalan是一个XSLT 1.0处理器,因此在代码中设置version="2.0"会将其设置为转发兼容的处理模式,这通常不是一个好主意,以获得精确和良好的错误消息。