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

<![CDATA[some stuff]]>

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

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


当前回答

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

其他回答

另一个例子是:

如果你有一个RSS提要(xml文档),并且想在描述的显示中包含一些基本的HTML编码,你可以使用CData对它进行编码:

<item>
  <title>Title of Feed Item</title>
  <link>/mylink/article1</link>
  <description>
    <![CDATA[
      <p>
      <a href="/mylink/article1"><img style="float: left; margin-right: 5px;" height="80" src="/mylink/image" alt=""/></a>
      Author Names
      <br/><em>Date</em>
      <br/>Paragraph of text describing the article to be displayed</p>
    ]]>
  </description>
</item>

RSS阅读器拉入描述并在CDATA中呈现HTML。

注意,不是所有的HTML标签都有效——我认为这取决于你使用的RSS阅读器。


解释一下为什么这个例子使用CData(而不是适当的pubData和dc:creator标签):这是用于使用RSS小部件的网站显示,我们没有真正的格式控制。

这使我们能够指定所包含图像的高度和位置,正确地格式化作者姓名和日期,等等,而不需要一个新的小部件。这也意味着我可以编写脚本,而不必手动添加它们。

从维基百科:

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

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

它用于包含可能被视为xml的数据,因为它包含某些字符。

这样,里面的数据将被显示,但不会被解释。

Cdata是您可能希望传递给xml解析器但仍然不解释为xml的数据。

Say for eg :- You have an xml which has encapsulates question/answer object . Such open fields can have any data which does not strictly fall under basic data type or xml defined custom data types. Like --Is this a correct tag for xml comment ? .-- You may have a requirement to pass it as it is without being interpreted by the xml parser as another child element. Here Cdata comes to your rescue . By declaring as Cdata you are telling the parser don't treat the data wrapped as an xml (though it may look like one )

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