我有一个包含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[
<xsl:value-of select="HTML_Descr"/>
]]>
</Description>
输出对反射有意义,但目标只是将HTML包装在CDATA中。
注意: - 无法将CDATA放入源XML中。 - 更准确地说,源XML文件是100个XML文件 - 处理器是xsltproc,使用XSL 1.0
对不起。发现的大量帮助只是保留HTML格式。 提前谢谢。
附录
完整的过程是 CSV - &gt; XML(使用CSV标头的临时翻译) - &gt; XML(好) - &gt; (X)HTML。
HTML无法从临时XML转换,因为良好的XML在存储库中维护 - 并且持续更新。
答案 0 :(得分:4)
实际上这是最接近的问题,Convert 'embedded' XML doc into CDATA output in XSLT (1.0)
回答:
以下功能可以根据需要进行,但它可能不是唯一且最佳的解决方案。
<xsl:template match="document">
<document>
<xsl:text disable-output-escaping="yes"><![CDATA[</xsl:text>
<xsl:copy-of select="./html"/>
<xsl:text disable-output-escaping="yes">]]></xsl:text>
</document>
</xsl:template>
答案 1 :(得分:0)
你可能想要这个:
<xsl:value-of select="HTML_Descr" disable-output-escaping="yes"/>
但请注意,如果CDATA中的HTML片段不是正确的XML(例如XHTML),这可能会导致XML文件无效。 谨慎使用 - 这是一种强烈的代码味道!
更好的方法是将HTML作为真正的XHTML放在XML文件中的自己的命名空间中,而不是使用CDATA文本文本块,这样您就可以让XSLT处理器复制节点而不是使用{{1} “黑客”。