为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2019-10-17 10:47:27
我想知道是否有任何方法可以]]>在xml文档的CDATA节中转义CDATA结束标记()。或者,更一般而言,如果在CDATA中有一些要使用的转义序列(但如果存在,我想无论如何都应该仅对开始或结束令牌进行转义)。基本上,您可以在CDATA中嵌入一个开始或结束令牌,并告诉解析器不要解释它,而是将其视为另一个字符序列。可能的话,如果您发现要尝试做的话,应该重构您的xml结构或代码,但是即使过去三年左右我每天都在使用xml,但我从未遇到过这个问题,我想知道是否有可能。只是出于好奇。编辑:除了使用html编码...
查看完整描述

3 回答

?
慕桂英3389331

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>]]> 


查看完整回答
反对 回复 2019-10-17
?
开满天机

TA贡献1786条经验 获得超13个赞

您必须将数据分解成部分隐藏起来]]>。


整个过程如下:


<![CDATA[]]]]><![CDATA[>]]>


首先<![CDATA[]]]]>有]]。第二个<![CDATA[>]]>有>。


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 566 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信