有没有办法在xml中转义CDATA结束令牌?

我想知道是否有任何方法可以]]>在xml文档的CDATA节中转义CDATA结束标记()。或者,更一般而言,如果在CDATA中有一些要使用的转义序列(但如果存在,我想无论如何都应该仅对开始或结束令牌进行转义)。


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


可能的话,如果您发现要尝试做的话,应该重构您的xml结构或代码,但是即使过去三年左右我每天都在使用xml,但我从未遇到过这个问题,我想知道是否有可能。只是出于好奇。


编辑:


除了使用html编码...


繁花不似锦
浏览 567回答 3
3回答

慕桂英3389331

显然,这个问题纯粹是学术性的。幸运的是,它有一个非常明确的答案。您无法转义CDATA结束序列。XML 规范的生产规则20 非常明确:[20]&nbsp; &nbsp; CData&nbsp; &nbsp; &nbsp; ::=&nbsp; &nbsp; &nbsp; (Char* - (Char* ']]>' Char*))编辑:此产品规则的字面意思是“一个CData节可能包含您想要的任何内容,但顺序为']]>'。无例外。”。EDIT2:同一部分还显示:在CDATA节中,只有CDEnd字符串被识别为标记,因此左尖括号和“&”号可能以其原义形式出现;它们不需要(也不能)使用“ &lt;”和“ &amp;” 进行转义。CDATA节不能嵌套。换句话说,不可能使用实体引用,标记或任何其他形式的解释语法。CDATA节中唯一解析的文本是]]>,它终止该节。因此,不可能]]>在CDATA节中转义。EDIT3:同一部分还显示:2.7 CDATA节[定义:CDATA节可能出现在字符数据可能出现的任何地方;它们用于转义包含字符的文本块,否则这些字符将被视为标记。CDATA节以字符串“ <![CDATA [”]开头,以字符串“]]>”:]结尾:]然后,在可能出现字符数据的任何地方都可能有一个CDATA节,包括多个相邻的CDATA节,而不是单个CDATA节。这样就可以拆分]]>令牌并将令牌的两个部分放在相邻的CDATA节中。例如:<![CDATA[Certain tokens like ]]> can be difficult and <invalid>]]>&nbsp;应该写成<![CDATA[Certain tokens like ]]]]><![CDATA[> can be difficult and <valid>]]>&nbsp;

开满天机

您必须将数据分解成部分隐藏起来]]>。整个过程如下:<![CDATA[]]]]><![CDATA[>]]>首先<![CDATA[]]]]>有]]。第二个<![CDATA[>]]>有>。
打开App,查看更多内容
随时随地看视频慕课网APP