2016-04-21 49 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"/> 

現在,我認爲這個問題的答案。