2016-04-21 62 views
1

我的一些样式表有点大,其中一些部分重复。我想为它们使用XInclude,这将允许我将它们分开放在整个样式表中。我不能在这里使用xsl:importxsl:include,因为我需要将它们注入到用于生成书签和活动链接(用于XSL-FO)的特定位置。XSLT样式表(eXist-db)中的XInclude

如果我使用:

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

...真的产生的.fo文件包含的部分。然而,这部分是未翻译的,这意味着它就像源代码那样。 XSL-FO处理器因此忽略它,而pdf结果没有书签。

至于分离的部分,我的根元素声明两个命名它保存为一个普通的XML文件:

<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'"> 
    ... 

如果我尝试包括在XSL样式表的形式相同的代码片断,它是相同的 - 它在那里被正确地注入,但是它没有将它的功能添加到整个样式表中,它仍然没有被翻译。

有没有我不知道的具体做法或限制?如何正确地做到这一点?

回答

0

对我来说,工作液不的XIncludexsl:include,并呼吁在适当的时候模板:

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

我创建了适当的样式表。最重要的是把根元素设置为当前的背景:

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

当然,它包括样式表到一个地方我所说的模板是必要的:

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

现在,我认为这个问题的答案。