展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > XML CDATA是什么?

XML CDATA是什么?

XML解析器默认解析所有文本,遇到特殊字符(如、&)需转义,否则导致解析错误。若未禁用外部实体,可能引发XXE安全漏洞,加载恶意文件或泄露数据,建议严格配置输入验证并禁用DTD。

本文目录

    先说几个核心概念。在XML的世界里,解析器(Parser)是一个相当“较真”的家伙。它有一个基本特性:会处理文档里的所有文本内容。这听起来简单,但实际操作中,这个特性会带来一些麻烦,尤其是当文本里混入了与XML语法冲突的特殊字符时。

    所以,理解解析数据和CDATA的区别,就成了写一手干净XML的必修课。

    解析数据

    XML解析器在处理文本时,默认是“开箱即读”的。它会逐字检查元素内部的所有文字,并试图理解其中的结构。比如下面这段代码:

    This text is also parsed

    解析器会认为它就是一个简单的文本节点。但问题在于,XML元素内部可能还包含了其他元素,像这样:

    BillGates

    解析器会把上面的代码理解成一个树状结构,自动“拆解”成:

     
        Bill 
        Gates
    

    这就是解析器的本职工作——把文本解析成结构化的数据。但这也意味着,如果你在文本里直接写了“<”或“>”,解析器就会“犯迷糊”,因为它会认为这是一个新标签的开始。

    转义字符

    为了让解析器能正确理解我们想表达的意思,就必须遵循“转义”规则。简单说,就是那些对XML语法有特殊意义的字符,不能直接写,得用对应的“实体”来代替。

    举个例子,如果你想表达“如果薪水小于1000”,不能写成:

    if salary < 1000 then

    因为解析器看到“<”字符,就会误以为后面跟着一个新标签。正确的做法是使用预定义的实体:

    if salary < 1000 then

    下面这张表汇总了XML里五个最常用的预定义实体,属于必须记住的基础知识:

    字符 实体 说明
    < < 小于号
    > > 大于号
    & & 和号
    ' ' 单引号
    " " 双引号

    所有实体都以“&”开头,以“;”结尾。需要明确的是,在XML中,只有“<”和“&”是严格禁止直接使用的,其他几个字符虽然合法,但为了减少出错,养成使用实体的习惯总没错。

    CDATA 部件

    如果文本里充斥着大量的“<”和“&”字符,比如一段程序代码,一个个去改写成实体不仅繁琐,还容易出错。这时候,CDATA就派上用场了。

    CDATA 就像是一个“保护层”,告诉解析器:“这里面的内容你不需要解析,原封不动地输出就行。” 它以一个特殊的标记 开始,以 ]]> 结束。

    看个例子,这段Ja vaScript代码里包含了“<”和“&”字符,如果放在CDATA里,完全不用转义:

    在这个例子里,