繁体   English   中英

通过XSLT将XML节点中的HTML转义为XSL-FO

[英]Escaped HTML in XML node via XSLT into XSL-FO

我有一个必须以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切换到该选项。

我的方案有解决方案吗?

您当然可以编写一个样式表来处理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结果树片段转换为节点集,或一个样式表中的类似内容,则不会发生序列化。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM