在另一个 CDATA 中使用 CDATA

Posted

技术标签:

【中文标题】在另一个 CDATA 中使用 CDATA【英文标题】:Using CDATA inside another CDATA 【发布时间】:2012-10-03 08:50:53 【问题描述】:

我遇到了这种困难的情况,我需要在另一个 CDATA 标记中使用 CDATA 标记。这种情况很容易解释。

我有以下事情:

<edit>
<![CDATA[
<script type="text/javascript">
<![CDATA[
    window.onload = function() 
    
        document.getElementById('block').onclick = function() 
        
            this.onclick = '';
            this.value = 'LA_SEND_CONFIRM';
            this.className = this.className.replace('button1','');
            document.getElementById('replacement').value = 'LA_BLOCK_CODE';
        
    
]]>
</script>
]]>
</edit>

为了显示目的,我还需要将我的 Javascript 包装在 CDATA 中,因此当我打开该 XML 文件时,它会正确显示,并且 Javascript 代码位于这些 CDATA 标记中。它们在 XML 文件本身中没有实际意义。

如您所知,上面的代码会给我一个 XML 解析错误,因为嵌套 CDATA 不起作用。有没有办法逃脱 ]]&gt; 以便我可以向我的用户显示这些括号?

我希望我已经足够清楚了。

【问题讨论】:

为什么不能有一个 CDATA 部分来包裹整个 &lt;script&gt; 元素? "CDATA 部分不能包含字符串 "]]>"。不允许嵌套 CDATA 部分。": w3schools.com/xml/xml_cdata.asp @Oded 我想将&lt;![CDATA[ JS here ]]&gt; 作为字符串显示给我的用户。因此,当有人打开我的 XML 文件时,他们只能看到 Javascript 的 CDATA 部分。我以为我已经解释过了。 您可以在this existing question 和我的回答中找到一些帮助。 Is there a way to escape a CDATA end token in xml?的可能重复 【参考方案1】:

您可以将 CDATA 部分中的 ]]&gt; 子字符串替换为:

]]]]><![CDATA[>

... 行。有了这个,您将使 ]] 成为一个 CDATA 部分的一部分,而 &gt; - 另一个,在前一个结束时开始。

【讨论】:

绝招! @Juampy 你将获得]]&gt; 使用CDATA 关闭+打开标签的串联:&lt;![CDATA[text]]]]&gt;&lt;![CDATA[&gt;&gt;texttextbeomestext]]pantext]]pan@9 > @Juampy 两个相邻的 CDATA 部分显示为好像它们是一个 CDATA 部分,因为它们之间没有任何内容。 "]]" 是第一个的一部分,">" 是第二个的一部分,因此 XML 解析器从未见过 embedded "]]>"。 ***.com/questions/223652/… : 可能很困难并且 ]]> 我发誓我记得在某处读过那个特定的三字符序列不可能包含在 CDATA 部分中,我认为这是一个相当明显的疏忽。我猜这个来源一定是错误的,除非它是旧版本的标准或其他东西。 严格来说,来源是正确的,因为现在您有两个 CDATA,而不是一个。可以影响一些解析器,我可以想象(因为这些 CDATA 在 xml 节点树中可见)

以上是关于在另一个 CDATA 中使用 CDATA的主要内容,如果未能解决你的问题,请参考以下文章

js 中//<![CDATA[ 意义

我如何从 BeautifulSoup 中获取 CData

使用 xsl 时 CDATA 未包含在我的 XML 中

如何声明然后在 CDATA 块中使用变量?

如何使用 ElementTree python 在 xml 解析器中处理 CDATA?

CDATA嵌套问题