提问人:aborted 提问时间:10/12/2012 更新时间:10/12/2012 访问量:19750
在另一个 CDATA 中使用 CDATA
Using CDATA inside another CDATA
问:
我遇到了这种困难的情况,我需要在另一个 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 不起作用。有没有办法转义,这样我就可以向我的用户显示这些括号?]]>
我希望我足够清楚。
答:
54赞
raina77ow
10/12/2012
#1
您可以通过将 CDATA 部分中的子字符串替换为以下内容来转义它:]]>
]]]]><![CDATA[>
...线。这样,您将成为一个 CDATA 部分的一部分,以及另一个部分的一部分,该部分在前一个部分结束时开始。]]
>
评论
0赞
caesarsol
5/21/2015
巧妙的伎俩!您将使用 CDATA 关闭 + 开始标记的串联获得@Juampy:beomes]]>
<![CDATA[
text]]
]]>
<![CDATA[
>
text
]]>
text]]
>text
0赞
Jesse Chisholm
11/12/2015
@Juampy两个相邻的 CDATA 部分显示为一个 CDATA 部分,因为它们之间没有任何内容。“]]”是第一个的一部分,“>”是第二个的一部分,因此 XML 解析器从未见过嵌入的“]]>”。
0赞
qxo
7/20/2018
stackoverflow.com/questions/223652/......: <![CDATA[某些标记,如]]]]><![CDATA[>可能很困难,而且<有效>]]>
0赞
Sparkette
5/15/2021
我发誓我记得在某处读到过,这个特定的三个字符序列不可能包含在 CDATA 部分中,我认为这是一个相当明显的疏忽。我想那个来源一定是错误的,除非在旧版本的标准或其他东西中是这样的。
0赞
Krypt
8/9/2021
严格来说,来源是正确的,因为现在您有两个 CDATA,而不是一个。我可以想象,可以影响一些解析器(因为这些CDATA在xml节点树中是可见的)
评论
CDATA
<script>
<![CDATA[ JS here ]]>