为什么要使用XML CDATA块?

时间:2010-08-26 17:01:51

标签: xml xsd data-serialization

创建XML时,我想知道为什么使用CDATA块而不是仅仅转义数据。 CDATA块中是否允许某些内容无法转义并放置在常规标记中?

<node><![CDATA[ ...something... ]]></node>

而不是

<node>...something...</node>

当然,在任何一种情况下你都需要转义数据:

function xmlspecialchars($text)
{
    return str_replace('&#039;', '&apos;', htmlspecialchars($text, ENT_QUOTES, 'utf-8'));
}

spec看来,当你没有逃避数据的选择时,CDATA似乎只是一个可行的解决方案 - 但你仍然相信它。例如,来自您博客的RSS源(由于某种原因导致无法转义实体)。

2 个答案:

答案 0 :(得分:2)

CDATA只是保持原始文本不变的标准方式,这意味着无论应用程序进程如何,XML都不需要采取任何明确的操作来进行unescape。

当您使用保留符号时,通常使用嵌入在XHTML中的JavaScript来实现这一点:

<script type="text/javascript">
//<![CDATA[
    var test = "<This is a string with reserved characters>";

    if (1 > 0) {
        alert(test);
    }
//]]>
</script>

如果你有if (1 &gt; 0),那么它必须明确地进行无意识(它没有)。它也更具可读性。

答案 1 :(得分:0)

这是第一个也是最重要的可读性功能。 XML和SGML之前最初的意思是人类可读 - 信不信由你: - ))

其次,对于一个好的解析器,它是一个perf功能。 ]]&gt;保证结束是实际的块结束,但除此之外它是一个blob。

通过本书解析器还应保留节点表示的info / attrib,以跟踪它是否具有显式CDATA,并且永远不会触及其中的单个字符。