模板无法识别Xml内容

时间:2013-11-25 14:35:58

标签: xslt xsl-fo

我的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="&lt;div &gt;&lt;p &gt;&lt;span&gt;Hi!&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;"/>

知道如何将此Html标记转换为xsl-fo?

谢谢你!

1 个答案:

答案 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!