当前位置:  开发笔记 > 编程语言 > 正文

有没有办法在xml中转义CDATA结束标记?

如何解决《有没有办法在xml中转义CDATA结束标记?》经验,为你挑选了5个好方法。

我想知道是否有任何方法可以]]>在xml文档的CDATA部分中转义CDATA结束标记().或者,更一般地说,如果在CDATA中使用某些转义序列(但如果它存在,我想它可能只有在逃避开始或结束令牌时才有意义).

基本上,您是否可以在CDATA中嵌入开始或结束标记,并告诉解析器不要解释它,而是将其视为另一个字符序列.

可能你应该重构你的xml结构或你的代码,如果你发现自己试图这样做,但即使我在过去3年左右每天都在使用xml而且我从来没有遇到过这个问题,我想知道是否有可能.只是出于好奇.

编辑:

除了使用html编码...



1> S.Lott..:

你必须将你的数据分成几块来隐藏]]>.

这是整个事情:

]]>

第一个]].第二个]]>>.


这应该是公认的答案.*逃避*是一个稍微含糊不清的术语,但这个答案肯定会解决*逃避*的精神.太糟糕了,它不符合OP对*转义*的狭隘概念,因为某种原因任意地要求反斜杠字符.
总而言之,转义`]]>`as`]]]]> `.长度的5倍...哇.但是,这是一个不常见的序列.
5x长度不仅热闹,它甚至不是代码中不常见的序列,这是CDATA的主要用例!假设压缩的JavaScript删除空格,您可以通过索引从名称数组中按名称访问字段,例如"if(fields [fieldnames [0]]> 3)",现在您必须将其更改为"if( fields [fieldnames [0]]]]> 3)",这使得使用CDATA的目的无法使其更具可读性,LOL.我想用口头方式打击那些提出CDATA语法的人.

2> ddaa..:

显然,这个问题纯粹是学术性的.幸运的是,它有一个非常明确的答案.

您无法转义CDATA结束序列.XML 规范的生产规则20 非常清楚:

[20]    CData      ::=      (Char* - (Char* ']]>' Char*))

编辑:此产品规则字面意思是"CData部分可能包含任何你想要的但是序列']]>'.没有例外."

编辑2:同一部分还写道:

在CDATA部分中,只有CDEnd字符串被识别为标记,因此左尖括号和&符号可能以其字面形式出现; 他们不需要(也不能)使用" <"和" &" 进行转义.CDATA部分无法嵌套.

换句话说,不可能使用实体引用,标记或任何其他形式的解释语法.CDATA部分中唯一解析的文本是]]>,它终止了该部分.

因此,不可能]]>在CDATA部分内逃脱.

编辑3:同一部分还写道:

2.7 CDATA部分

[定义:CDATA部分可能出现在任何可能出现字符数据的地方; 它们用于转义包含字符的文本块,否则这些字符将被识别为标记.CDATA部分以字符串"":]结束

然后可能存在CDATA部分,可能出现任何字符数据,包括单个CDATA部分的多个相邻CDATA部分.这使得可以分割]]>令牌并将其两部分放在相邻的CDATA部分中.

例如:

 can be difficult and ]]> 

应该写成

 can be difficult and ]]> 


这不是一个学术问题.想想包含有关CDATA的讨论的博客文章的RSS提要.
我刚刚被这个被咬了,因为我试图将一些压缩的Javascript编码成一个
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有