有没有办法逃避xml中的CDATA结束令牌?

前端之家收集整理的这篇文章主要介绍了有没有办法逃避xml中的CDATA结束令牌?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道是否有任何方式逃避CDATA结束令牌(]]>)在xml文档中的CDATA部分。或者,更一般地,如果有一些转义序列在CDATA内使用(但如果它存在,我想它可能只有意义,以逃避开始或结束令牌,反正)。

基本上,你可以有一个开始或结束令牌嵌入在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>]]>
原文链接:https://www.f2er.com/xml/294159.html

猜你在找的XML相关文章