0

我有一个包含 HTML 标记的源 XML。它是从一个笨拙的 CSV 文件创建的。

目标是将源 XML 转换为第二个 XML 使用以下内容,

<Description type="long" format="html">
  <![CDATA[             
    <xsl:value-of select="HTML_Descr"/>
 ]]>
</Description>

不幸的是,XSL 转换如下

<Description type="long" format="html">
  <![CDATA[             
    &lt;xsl:value-of select="HTML_Descr"/&gt;
 ]]>
</Description>

输出在反射时有意义,但目标只是将 HTML 包装在 CDATA 中。

注意: - 不能将 CDATA 放入源 XML。- 更准确地说,一个源 XML 文件是 100 个 XML 文件 - 处理器是 xsltproc,使用 XSL 1.0

对不起。找到的大量帮助只是保留了 HTML 格式。提前致谢。

附录

整个过程是 CSV -> XML(使用 CSV 标头的临时翻译)-> XML(好)-> (X)HTML。

并且 HTML 不能从临时 XML 中翻译出来,因为好的 XML 保存在存储库中,并且会持续更新。

4

2 回答 2

4

实际上这是最接近的问题,Convert 'embedded' XML doc into CDATA output in XSLT (1.0)

并回答:

以下功能根据需要,虽然它可能不是唯一和最好的解决方案。

<xsl:template match="document">
  <document>
    <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
    <xsl:copy-of select="./html"/>
    <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
  </document>
</xsl:template>
于 2013-03-18T07:26:10.097 回答
0

你可能想要这个:

<xsl:value-of select="HTML_Descr" disable-output-escaping="yes"/>

但是请注意,如果 CDATA 中的 HTML 片段不是正确的 XML(例如 XHTML),这可能会使您的 XML 文件无效。谨慎使用- 这是一种强烈的代码气味!

更好的方法是将 HTML 作为真正的 XHTML 在 XML 文件的自己的命名空间中,而不是使用 CDATA 文字文本块,这样您就可以让 XSLT 处理器复制节点而不是使用disable-output-escaping“hack”。

于 2013-03-17T21:34:34.803 回答