当我导入另一个模板时,我遇到了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
答案 0 :(得分:2)
请参阅https://www.w3.org/TR/xslt#import,&#34; xsl:import元素子元素必须位于xsl:stylesheet元素的所有其他元素子元素之前&#34;所以尝试在任何其他子元素之前移动xsl:import
。此外,Xalan是一个XSLT 1.0处理器,因此在代码中设置version="2.0"
会将其设置为转发兼容的处理模式,这通常不是一个好主意,以获得精确和良好的错误消息。