使用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 文档。