X包含在XSLT样式表中(eXist-db)

时间:2016-04-21 13:45:04

标签: xslt exist-db xinclude

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

如果我使用:

<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样式表的形式包含相同的代码片段,它是相同的 - 它被正确地注入,但它没有将其功能添加到整个样式表,它仍然没有翻译。

我不知道有任何具体的做法或限制吗?怎么做得好?

1 个答案:

答案 0 :(得分:0)

对我来说,工作解决方案不是 XInclude ,而是xsl: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"/>

目前,我认为这个问题已经回答了。