在將它交給另一個工具(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