在另一个 CDATA 中使用 CDATA

Using CDATA inside another CDATA

提问人:aborted 提问时间:10/12/2012 更新时间:10/12/2012 访问量:19750

问:

我遇到了这种困难的情况,我需要在另一个 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 不起作用。有没有办法转义,这样我就可以向我的用户显示这些括号?]]>

我希望我足够清楚。

xml 解析 cdata

评论

1赞 Oded 10/12/2012
为什么你不能用一个部分来包装整个元素?CDATA<script>
1赞 dani herrera 10/12/2012
“CDATA 节不能包含字符串”]]>”。不允许嵌套的 CDATA 部分 w3schools.com/xml/xml_cdata.asp
0赞 aborted 10/12/2012
@Oded我想以字符串形式显示给我的用户。因此,当有人打开我的 XML 文件时,他们只能看到 Javascript 的 CDATA 部分。我以为我已经解释过了。<![CDATA[ JS here ]]>
0赞 Matt Gibson 10/12/2012
您可能会在这个现有问题中找到一些帮助,以及我对它的回答。
1赞 Michael Freidgeim 3/29/2016
是否有办法在 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节点树中是可见的)