我想知道是否有任何方法可以]]>
在xml文档的CDATA部分中转义CDATA结束标记().或者,更一般地说,如果在CDATA中使用某些转义序列(但如果它存在,我想它可能只有在逃避开始或结束令牌时才有意义).
基本上,您是否可以在CDATA中嵌入开始或结束标记,并告诉解析器不要解释它,而是将其视为另一个字符序列.
可能你应该重构你的xml结构或你的代码,如果你发现自己试图这样做,但即使我在过去3年左右每天都在使用xml而且我从来没有遇到过这个问题,我想知道是否有可能.只是出于好奇.
编辑:
除了使用html编码...
你必须将你的数据分成几块来隐藏]]>
.
这是整个事情:
]]>
第一个有
]]
.第二个]]>
有>
.
显然,这个问题纯粹是学术性的.幸运的是,它有一个非常明确的答案.
您无法转义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]]>