基本上,你可以有一个开始或结束令牌嵌入在CDATA中,并告诉解析器不要解释它,而是将其视为只是另一个字符序列。
也许,你应该重构你的xml结构或你的代码,如果你发现自己试图这样做,但即使我一直在使用xml每天在过去3年左右,我从来没有这个问题,我想知道是否可能。只是出于好奇。
编辑:
除了使用html编码…
您不能转义CDATA结束序列。 XML specification的生成规则20非常清楚:
[20] CData ::= (Char* - (Char* ']]>' Char*))
编辑:这个产品规则从字面上意味着“一个CData节可以包含任何你想要的序列’]]>>’。没有例外。
编辑2:same section也读作:
Within a CDATA section,only the CDEnd string is recognized as markup,so that left angle brackets and ampersands may occur in their literal form; they need not (and cannot) be escaped using “
<
” and “&
“. CDATA sections cannot nest.
换句话说,不可能使用实体引用,标记或任何其他形式的解释语法。 CDATA段内唯一解析的文本是]]>,并终止该段。
因此,不可能逃脱]]>在CDATA部分。
编辑3:same section也读取:
2.7 CDATA Sections
[Definition: CDATA sections may occur anywhere character data may occur; they are used to escape blocks of text containing characters which would otherwise be recognized as markup. CDATA sections begin with the string “<![CDATA[” and end with the string “]]>”:]
然后可能存在可能出现字符数据的CDATA段,包括单个CDATA段的多个相邻CDATA段。这允许它可以将]]>令牌并将其两个部分放在相邻的CDATA段中。
例如:
<![CDATA[Certain tokens like ]]> can be difficult and <invalid>]]>
应写为
<![CDATA[Certain tokens like ]]]]><![CDATA[> can be difficult and <valid>]]>