我的某些样式表有些大,而某些部分在重复。我想对它们使用XInclude,这将使我可以将它们与整个样式表分开。我无法使用xsl:import
或xsl: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样式表的形式中包含相同的代码段,则是相同的—正确地注入了该代码段,但未将其功能添加到整个样式表中,仍然没有翻译。
我不知道有什么特定的做法或限制吗?如何正确地做到这一点?
对我来说,有效的解决方案不是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"/>
现在,我认为这个问题已经回答。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句