2017-09-05 1 views
0

Ich habe ein Problem mit einem XSLT/XSL-FO-Vorlage, wenn ich eine andere Vorlage importieren:TransformerException wenn xsl: import statt xsl: include

Hauptvorlage sieht wie folgt aus:

<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> 

Wie Sie sehen können, habe ich die Vorlage in Subtemplates aufgeteilt (dieses Beispiel ist hier auf das Minimum reduziert). Im so genannten "Fußteil" rufe ich eine Vorlage auf, die aus dem "KopfUndFussteil.xsl" importiert werden soll. Das sieht so aus:

<?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> 

So ziemlich einfach. Als ich die Subtemplate BEINHALTEN

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

Alle mit funktioniert gut - keine Fehler auftreten, "Block2" -Text in Ziel PDF

Aber gemacht, als ich

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

Ich benutze den folgenden Fehler erhalten:

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

Also, tut anybo dy haben eine Idee was ist das Problem mit der Import-Anweisung? Ich benutze Xalan 2.7.2

Vielen Dank im Voraus! Heiko

Antwort

2

Siehe https://www.w3.org/TR/xslt#import "Die xsl: import -Kindelemente alle anderen Elemente Kinder eines xsl vorangestellt werden muss: Sheet-Element" so versuchen, die xsl:import up vor jedem anderen Kind-Elemente zu bewegen. Auch Xalan ist ein XSLT 1.0 Prozessor, so dass die Einstellung version="2.0" in Ihrem Code es auf einen kompatiblen Verarbeitungsmodus setzt, was normalerweise keine gute Idee ist, präzise und gute Fehlermeldungen zu erhalten.

+0

Vielen Dank! Funktioniert! – Heiko

Verwandte Themen