0

我有一个必须生成为 PDF 的文档。我使用 Xalan 和 Apache FOP 将带有 XSLT 的 XML 处理成 XSL-FO。

在我的 XML 树中有一个这样的节点:

<root>
    <formula>
        <text>3+10*10^-6*l</text>
        <html>&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;3 &middot; + 10 &middot; 10&lt;sup&gt;-6&lt;/sup&gt; · &lt;i&gt;l&lt;/i&gt;&lt;/html&gt;</html>
    </formula>     
</root>

我怎样才能不仅获得正确的 HTML(通过使用disable-output-escaping="yes"),而且获得一个exsl:node-set我可以稍后处理的节点集(?)?我的意思是,我想获得该 HTML 公式的 XSL-FO 表示,以便将其集成到我的 PDF 输出中。

就像是

<xsl:template match="xhtml:b">
    <fo:inline font-weight="bold"><xsl:apply-templates/></fo:inline>
</xsl:template>

可能有一个解决方案使用saxon:parse(). 但是,我不能从 Xalan-J 切换到那个。

在我的场景中有解决方案吗?

4

1 回答 1

2

您当然可以编写一个样式表来使用 Xalan 进行处理

<xsl:template match="html">
  <xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:template>

然后创建带有 XHTML 标记的序列化结果文档。

然后,第二个样式表可以处理第一个样式表的结果文档,例如

<xsl:template match="xhtml:html" xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <xsl:apply-templates/>
</xsl:template>

但是您不能在一个带有结果树片段的样式表中执行此操作,因为doeexsl:node-set (禁用输出转义)是一种序列化功能,并且如果您使用在一个样式表中或类似的帮助下转换为节点集的结果树片段没有发生序列化。

仔细观察,因为您的代码段似乎包含对未声明实体的引用,例如&middot;我认为该示例根本不会解析为 XML,因此您需要先修复它才能进行任何 XSLT 处理。

于 2013-07-25T17:40:28.733 回答