使用Xsl <fo:external-graphic> 交出数据
Using Xsl <fo:external-graphic> to hand over data
在 XSL 1.0 中有没有一种方法可以使用 XSL fo:external-graphic 传递变量或参数,就像我在使用 xsl:call-template
时所做的那样
我知道如何解决这个问题,但我只是想知道是否有我没有看到的方法。
如果您的 SVG 足够小,您可以使用 fo:instream-foreign-object
。 (如果 SVG 非常大,XSL-FO 文件的大小可能会成为问题。)
main.xsl
:
<xsl:import href="svg/svg_graphic.xsl" />
<xsl:template match="some/context">
<fo:instream-foreign-object>
<xsl:call-template name="make-svg">
<xsl:with-param name="param-a" select="..." />
</call-template>
</fo:instream-foreign-object>
</xsl:template>
svg_graphic.xsl
:
<xsl:template name="make-svg">
<xsl:param name="param-a" select="..." />
<svg:svg>
...
</svg:svg>
</xsl:template>
<fo:external-graphic src="svg/svg_graphic.xsl" />
是行不通的。在您的 XSLT 样式表中,XSL-FO 命名空间中的元素只是文字结果元素。它们被复制到结果树中,并且 XSLT 处理器不会以其他方式对其进行操作。 XSLT 处理器对文字结果元素上特定于 XSLT 的属性(XSLT 名称空间中的属性定义为在文字结果元素上使用时具有某种意义)进行操作。文字属性(以及一些 XSLT 定义的属性)的属性值中的属性值模板 ({...}
) 由 XSLT 处理器处理。
没有 XSLT 1.0 方法可以让 XSLT 处理器运行另一个基于 XSL-FO 定义的属性值的样式表。
也没有 XSLT 1.0 方法可以从一个 运行 样式表生成多个结果文档。您的 XSLT 处理器可能有特定于处理器(或 EXSLT)的方法来执行此操作。该扩展(如果存在)可能不允许您生成部分 XSL-FO 结果文档、生成 SVG 结果文档,然后返回生成更多 XSL-FO 文档。
在 XSL 1.0 中有没有一种方法可以使用 XSL fo:external-graphic 传递变量或参数,就像我在使用 xsl:call-template
时所做的那样我知道如何解决这个问题,但我只是想知道是否有我没有看到的方法。
如果您的 SVG 足够小,您可以使用 fo:instream-foreign-object
。 (如果 SVG 非常大,XSL-FO 文件的大小可能会成为问题。)
main.xsl
:
<xsl:import href="svg/svg_graphic.xsl" />
<xsl:template match="some/context">
<fo:instream-foreign-object>
<xsl:call-template name="make-svg">
<xsl:with-param name="param-a" select="..." />
</call-template>
</fo:instream-foreign-object>
</xsl:template>
svg_graphic.xsl
:
<xsl:template name="make-svg">
<xsl:param name="param-a" select="..." />
<svg:svg>
...
</svg:svg>
</xsl:template>
<fo:external-graphic src="svg/svg_graphic.xsl" />
是行不通的。在您的 XSLT 样式表中,XSL-FO 命名空间中的元素只是文字结果元素。它们被复制到结果树中,并且 XSLT 处理器不会以其他方式对其进行操作。 XSLT 处理器对文字结果元素上特定于 XSLT 的属性(XSLT 名称空间中的属性定义为在文字结果元素上使用时具有某种意义)进行操作。文字属性(以及一些 XSLT 定义的属性)的属性值中的属性值模板 ({...}
) 由 XSLT 处理器处理。
没有 XSLT 1.0 方法可以让 XSLT 处理器运行另一个基于 XSL-FO 定义的属性值的样式表。
也没有 XSLT 1.0 方法可以从一个 运行 样式表生成多个结果文档。您的 XSLT 处理器可能有特定于处理器(或 EXSLT)的方法来执行此操作。该扩展(如果存在)可能不允许您生成部分 XSL-FO 结果文档、生成 SVG 结果文档,然后返回生成更多 XSL-FO 文档。