我经常在XML文件中发现这个奇怪的CDATA标签:

<![CDATA[some stuff]]>

我观察到这个CDATA标记总是出现在开头,然后跟着一些东西。

但有时用,有时不用。我假设这是为了标记一些东西是“数据”,将被插入之后。但是什么是数据呢?我用XML标记写的东西不是某种数据吗?


当前回答

其中包含的数据不会被解析为XML,因此不需要是有效的XML,或者可以包含看似XML但实际上不是的元素。

其他回答

从维基百科:

在XML文档或外部解析实体中,CDATA节是一个 元素内容的一部分,标记为供解析器解释 仅作为字符数据,而不是标记。 http://en.wikipedia.org/wiki/CDATA

因此:CDATA中的文本被解析器视为字符,而不是XML节点。

注意,只有在直接将文本放入XML文本文件时才需要CDATA结构。

也就是说,只有在手动输入或以编程方式直接构建XML文本时才需要使用CDATA。

使用DOM处理器API或SimpleXML输入的任何文本都将自动转义,以防止违反XML内容规则。

尽管如此,有时使用CDATA可以减少原本由所有实体编码产生的文本大小,例如样式标记中的css或脚本标记中的javascript,其中许多语言构造使用HTML|XML中的字符,如<和>。

当我的xml元素需要存储HTML代码时,我曾经不得不使用CDATA。类似的

<codearea>
  <![CDATA[ 
  <div> <p> my para </p> </div> 
  ]]>
</codearea>

CDATA意味着它会忽略任何可以被解释为XML标签的字符,比如<和>等。

通常用于在XML文档中嵌入自定义数据,如图片或声音数据。

CDATA代表字符数据。您可以使用它来转义某些字符,否则这些字符将被视为常规XML。其中的数据将不会被解析。 例如,如果你想传递一个包含&的URL,你可以使用CDATA来实现。否则,您将得到一个错误,因为它将被解析为常规XML。