XInclude in XSLT 样式表 (eXist-db)
XInclude in XSLT Stylesheets (eXist-db)
我的一些样式表有点大,有些部分重复。我想为它们使用 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"/>
目前,我认为这个问题已经回答。
我的一些样式表有点大,有些部分重复。我想为它们使用 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"/>
目前,我认为这个问题已经回答。