XML中的<![CDATA[<![CDATA[一些文本]]]]><![CDATA[>]]>是什么意思?

4

我是XML和相关技术的新手。

这个CDATA标记总是在开头,然后跟着一些内容。

我在我的XML文件中使用了这个:

<text><![CDATA[<![CDATA[TAX INVOICE]]]]><![CDATA[>]]></text>

我有以下问题,请帮助我。 "<![CDATA[some text]]]]>"是什么意思?

3
与论坛网站不同,我们在 Stack Overflow 上不使用“感谢”、“任何帮助都感激”或签名。请参见“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?”。 - John Saunders
@RGraham,感谢你指引我找到正确的解决方案。 - Girish K
2个回答

12

除非内容中出现特殊字符,例如"&"和"<",否则该字符串

<![CDATA[xxxxx]]>

与......完全相同的意思

xxxxx

区别在于第二种形式中 "&" 和 "<" 有特殊含义,而在 CDATA 形式中,唯一具有特殊含义的是字符串 "]]>",它作为终止符。

您的更复杂的示例:

<![CDATA[<![CDATA[TAX INVOICE]]]]><![CDATA[>]]>

这有点让人头痛,并且源于一种懒惰的编程习惯,即将文本用 CDATA 区块包裹起来。CDATA 区块无法嵌套,因此第一个 ]]> 终止了第一个 <!CDATA[,这意味着该字符串等同于:

<![CDATA[TAX INVOICE]]>

你可能会认为,这反过来等同于

TAX INVOICE

但实际情况并非如此,因为XML解析器只会解释外部的CDATA分隔符,因此它将传递给应用程序的内容是

<![CDATA[TAX INVOICE]]>

5
术语“CDATA”来自于SGML世界,它是XML的复杂前身。该术语缩写为“字符数据”,意味着数据由字符组成,不应进行解析。CDATA内部的标签、实体、属性和处理指令都被视为文本,而不是XML元素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接