为什么这个<! - [CDATA []] - >中的XML标签数据

时间:2010-12-13 13:44:47

标签: xml

我在许多XML文件中看到过这个<![CDATA[ ]]>里面的数据。有什么用?

4 个答案:

答案 0 :(得分:5)

来自维基百科

CDATA部分以以下顺序开头:

<![CDATA[

以第一次出现的序列结束:

]]>

这两个序列之间的所有字符都被解释为字符,而不是标记或实体引用。例如,在这样的行中:

<sender>John Smith</sender>

打开和关闭“sender”标签被解释为标记。但是,如果这样写:

<![CDATA[<sender>John Smith</sender>]]>

然后代码的解释方式与它的编写方式相同:

&lt;sender&gt;John Smith&lt;/sender&gt;

查看Wiki页面了解更多详情。

答案 1 :(得分:3)

请参阅CDATA at Wikipedia

  

在XML文档或外部解析的实体中,CDATA部分是元素内容的一部分,标记为解析器仅解释为字符数据,而不是标记。

这意味着解析器不会解释<![CDATA[ ]]>中包含的任何数据。

假设您希望将HTML作为文本存储在XML文档中。这是错的:

<root>
    <myhtml>
        <div><b>Foo bar</b></div>
    </myhtml>
</root>

解析器会尝试解析<div><b>Foo bar</b></div>并创建DOM元素。它适用于此示例,但不适用于符合DTD的文档。

相反,我们想要这个:

<root>
    <myhtml>
        <![CDATA[ <div><b>Foo bar</b></div> ]]>
    </myhtml>
</root>

<div><b>Foo bar</b></div>将成为文本节点的内容。

答案 2 :(得分:0)

它允许文字文本,包括大多数xml“特殊字符”。它不是“外部”xml数据的一部分,而只是文本。

答案 3 :(得分:0)

解析器会忽略CDATA部分内的任何内容。

例如,您要在xml文档中发送javascript的图像,因为它很可能包含特殊字符(&lt;,&gt;,&amp;等),xml解析器将产生错误。

使用此标记,解析器不会解析它,也不会产生错误。