在另一个 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 不起作用。有没有办法逃脱 ]]>
以便我可以向我的用户显示这些括号?
我希望我已经足够清楚了。
【问题讨论】:
为什么不能有一个CDATA
部分来包裹整个 <script>
元素?
"CDATA 部分不能包含字符串 "]]>"。不允许嵌套 CDATA 部分。": w3schools.com/xml/xml_cdata.asp
@Oded 我想将<![CDATA[ JS here ]]>
作为字符串显示给我的用户。因此,当有人打开我的 XML 文件时,他们只能看到 Javascript 的 CDATA 部分。我以为我已经解释过了。
您可以在this existing question 和我的回答中找到一些帮助。
Is there a way to escape a CDATA end token in xml?的可能重复
【参考方案1】:
您可以将 CDATA 部分中的 ]]>
子字符串替换为:
]]]]><![CDATA[>
... 行。有了这个,您将使 ]]
成为一个 CDATA 部分的一部分,而 >
- 另一个,在前一个结束时开始。
【讨论】:
绝招! @Juampy 你将获得]]>
使用CDATA 关闭+打开标签的串联:<![CDATA[
text]]
]]>
<![CDATA[
>
>
text
text
beomestext]]
pantext]]
pan@9 >
@Juampy 两个相邻的 CDATA 部分显示为好像它们是一个 CDATA 部分,因为它们之间没有任何内容。 "]]" 是第一个的一部分,">" 是第二个的一部分,因此 XML 解析器从未见过 embedded "]]>"。
***.com/questions/223652/… : 可能很困难并且 以上是关于在另一个 CDATA 中使用 CDATA的主要内容,如果未能解决你的问题,请参考以下文章