我的xml标签包含一个带有 html 内容的属性。我需要将此 html 转换为 xsl-fo 。这是我的 xslt 代码:
<xsl:template match ="rtf">
<fo:block-container>
<fo:block>
<xsl:call-template name ="ConvertHtmlToXslfo">
<xsl:with-param name ="content">
<xsl:value-of select ="@rtfAsHtml" disable-output-escaping ="yes"/>
</xsl:with-param>
</xsl:call-template>
</fo:block>
</fo:block-container>
</xsl:template>
<xsl:template name="ConvertHtmlToXslfo">
<xsl:param name ="content"></xsl:param>
<fo:block-container>
<xsl:apply-templates select="msxsl:node-set($content)"/> <!--here is the problem-->
</fo:block-container>
</xsl:template>
<xsl:template match ="div">
<fo:block-container>
<!--more code here-->
</fo:block-container>
</xsl:template>
<xsl:template match ="p">
<fo:block>
<!--more code here-->
</fo:block>
</xsl:template>
<xsl:template match ="span">
<fo:inline>
<!--more code here-->
</fo:inline>
</xsl:template>
但是,在此 html 内容的调用apply-templates中存在问题。相关模板无法识别它。
以下是包含 Html 属性的xml标记:
<rtf rtfAsHtml="<div ><p ><span>Hi!</span></p></div>"/>
知道如何将此Html标记转换为xsl-fo?
谢谢你!答案 0 :(得分:1)
问题是您的xml / html内容已转义。您尝试应用disable-output-escaping,但这仅适用于写入输出文件或流。因此,您实际上只是在模板上提交未转义的属性内容,这确实无法做到。
不确定您使用的是哪种XSLT解析器,但如果您使用Saxon,则可以尝试应用saxon:parse:
http://saxonica.com/documentation9.4-demo/html/extensions/functions/parse.html
这确实要求属性的内容格式正确。如果没有,你可以尝试:
http://saxonica.com/documentation9.4-demo/html/extensions/functions/parse-html.html
HTH!