2016-04-21 15 views
1

Einige meiner Stylesheets sind ein bisschen groß und einige ihrer Teile wiederholen sich. Ich würde gerne XInclude für sie verwenden - was es mir erlauben würde, sie vom ganzen Stylesheet zu trennen. Ich kann xsl:import oder xsl:include hier nicht verwenden, weil ich sie in den spezifischen Platz für das Erzeugen von Bookmarks und von aktiven Verbindungen (für XSL-FO) einspritzen muss.XInclude in XSLT Stylesheets (eXist-db)

Wenn ich benutze:

<xi:include href="/db/apps/tested-bunny/resources/xsl-fo/common/bookmark-tree.xml/> 

... die .fo Datei erzeugt wirklich das Teil enthält. Der Teil ist jedoch nicht übersetzt, was bedeutet, dass er da ist wie in der Quelle. Der XSL-FO-Prozessor ignoriert dies und das PDF-Ergebnis ist ohne Lesezeichen.

Wie für den abgetrennten Teil ich es als eine normale XML-Datei in dem Root-Elemente deklarierten mit zwei Namespaces gespeichert:

<fo:bookmark-tree xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:if test="$head-level ge '1'"> 
    ... 

Wenn ich versuche, den gleichen Code-Schnipsel in einer Form von XSL-Stylesheet enthalten, es ist das gleiche - es wird dort richtig injiziert, aber es fügt seine Funktionalität nicht dem ganzen Stylesheet hinzu, es ist dort noch nicht übersetzt.

Gibt es eine bestimmte Praxis oder Einschränkung, die mir nicht bekannt ist? Wie man das richtig macht?

Antwort

0

Für mich ist die Arbeitslösung war nicht XInclude aber xsl:include und die Vorlage zum richtigen Zeitpunkt Aufruf:

... 
</fo:declarations> 
<!-- Bookmarks from the external stylesheet --> 
<xsl:call-template name="bookmark-tree"/> 
<fo:page-sequence master-reference="title-page"> 
... 

ich die richtige Sheet erstellt. Wichtig war das Stammelement für den aktuellen Kontext zu setzen:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="2.0"> 
    <xsl:template name="bookmark-tree" match="."> 
     <fo:bookmark-tree> 
      ... 

Und natürlich war es notwendig, das Stylesheet in dem schließen, wo ich die Vorlage nennen:

<xsl:include href="common/bookmark-tree.xsl"/> 

Vorerst Ich betrachte diese Frage als beantwortet.