我有一份必须以PDF格式生成的文档。我使用Xalan和Apache FOP将XSLT中的XML处理成XSL-FO。
在我的XML树中有一个这样的节点:
<root>
<formula>
<text>3+10*10^-6*l</text>
<html><html xmlns="http://www.w3.org/1999/xhtml">3 · + 10 · 10<sup>-6</sup> · <i>l</i></html></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切换到那个。
我的情景中是否有解决方案?
答案 0 :(得分:1)
你当然可以用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>
但是你不能在一个带有结果树片段的样式表中这样做,因为 doe (disable-output-escaping)是一个序列化功能,如果你使用转换为节点的结果树片段在一个样式表中在exsl:node-set
或类似的帮助下设置,没有序列化发生。
仔细观察,因为您的代码段似乎包含对未声明实体(如·
)的引用,我认为该示例根本不会解析为XML,因此您需要先修复它以进行任何XSLT处理。