在将它交给另一个工具(InstallAnywhere本身)以更新某些值之前,我正在处理一个XML文档(一个InstallAnywhere .iap_xml安装程序)。但是,看起来我正在使用的XSLT转换是从文档剥离CDATA节(对于InstallAnywhere来说显得非常重要)。XSLT处理器可以保留空的CDATA部分吗?
我使用Ant 1.7.0,JDK 1.6.0_16和样式表基础上的身份:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" cdata-section-elements="string" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
基本上, “串” 的节点,看起来像:
<string><![CDATA[]]></string>
正在处理成:
<string/>
从阅读XSLT常见问题,我可以看到,发生的事情是合法的,就XSLT规范而言被关注到。有什么办法可以防止这种情况发生,并说服XSLT处理器发出CDATA段?
有没有你想要的理由? – skaffman 2009-09-01 21:31:38
是的,当它看到 表单时,InstallAnywhere(此样式表之后的链中的下一个工具)会引发可怕的警告。 (我认为它期望在DOM中存在一个子文本节点,或者,IA已经构建了一个不太完整的XML-XML解析器。) –
2009-09-01 21:51:01
生成CDATA节的另一个原因:保留JavaScript代码内联脚本是XHTML文档的一部分。 (截至今天)编码的'<', '>'和'&'在JavaScript引擎/浏览器中没有正确解释。 – 2011-01-04 13:25:48