发布于2026-07-22 阅读(0)
扫一扫,手机访问
先说几个核心概念。在XML的世界里,解析器(Parser)是一个相当“较真”的家伙。它有一个基本特性:会处理文档里的所有文本内容。这听起来简单,但实际操作中,这个特性会带来一些麻烦,尤其是当文本里混入了与XML语法冲突的特殊字符时。
所以,理解解析数据和CDATA的区别,就成了写一手干净XML的必修课。
XML解析器在处理文本时,默认是“开箱即读”的。它会逐字检查元素内部的所有文字,并试图理解其中的结构。比如下面这段代码:
This text is also parsed
解析器会认为它就是一个简单的文本节点。但问题在于,XML元素内部可能还包含了其他元素,像这样:
Bill Gates
解析器会把上面的代码理解成一个树状结构,自动“拆解”成:
Bill Gates
这就是解析器的本职工作——把文本解析成结构化的数据。但这也意味着,如果你在文本里直接写了“<”或“>”,解析器就会“犯迷糊”,因为它会认为这是一个新标签的开始。
为了让解析器能正确理解我们想表达的意思,就必须遵循“转义”规则。简单说,就是那些对XML语法有特殊意义的字符,不能直接写,得用对应的“实体”来代替。
举个例子,如果你想表达“如果薪水小于1000”,不能写成:
因为解析器看到“<”字符,就会误以为后面跟着一个新标签。正确的做法是使用预定义的实体:
下面这张表汇总了XML里五个最常用的预定义实体,属于必须记住的基础知识:
| 字符 | 实体 | 说明 |
| < | < | 小于号 |
| > | > | 大于号 |
| & | & | 和号 |
| ' | ' | 单引号 |
| " | " | 双引号 |
所有实体都以“&”开头,以“;”结尾。需要明确的是,在XML中,只有“<”和“&”是严格禁止直接使用的,其他几个字符虽然合法,但为了减少出错,养成使用实体的习惯总没错。
如果文本里充斥着大量的“<”和“&”字符,比如一段程序代码,一个个去改写成实体不仅繁琐,还容易出错。这时候,CDATA就派上用场了。
CDATA 就像是一个“保护层”,告诉解析器:“这里面的内容你不需要解析,原封不动地输出就行。” 它以一个特殊的标记 开始,以 ]]> 结束。
看个例子,这段Ja vaScript代码里包含了“<”和“&”字符,如果放在CDATA里,完全不用转义:
在这个例子里,标签内的所有内容,包括那些“<”和“&”符号,都被原封不动地传递给解析器,不会触发任何语法错误。
虽然CDATA很方便,但用起来也有几个坑需要注意:
1. 不能嵌套。 CDATA内部不能再包含另一个CDATA。如果你的数据里恰好包含了字符串]]>或者,那就会导致解析错误。
2. 注意空格和换行。 在结束标记]]>内部,不能有空格或换行符,必须保持连续。
总而言之,PCDATA和CDATA的核心区别在于:PCDATA(Parsed Character Data)是“被解析的字符数据”,里面的特殊字符需要转义;而CDATA(Character Data)是“字符数据”,解析器会跳过它,里面的任何内容都视为纯文本。什么时候用CDATA?当你需要在XML里嵌入一大段包含大量特殊字符的文本(比如代码、SQL语句、HTML片段)时,它是最好的选择。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8