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