PCDATA指会被XML解析器处理的文本内容,用于元素声明中表示可含纯文本或混排子元素,但特殊字符必须实体转义;CDATA节则跳过解析,用于包裹含大量特殊字符的原始文本。

PCDATA 是“Parsed Character Data”的缩写,指**会被 XML 解析器处理的文本内容**。它出现在元素声明中(比如 DTD 里的 !ELEMENT),表示该元素可以包含纯文本、子元素,或二者混合——但所有文本都得遵守 XML 语法规则:不能直接写 、&、" 等特殊字符,必须用实体代替(如 、&)。
PCDATA 用在哪儿?怎么用?
它只出现在元素内容定义中,常见于 DTD 或旧式 Schema 声明:
-
:表示元素只能含纯文本(不能有子元素) -
:表示可混排文本和、子元素 - 实际内容里写
是错的——因为A note 没转义,解析器会当成新标签开始;正确写法是A zuojiankuohaophpcnsmallyoujiankuohaophpcnnotezuojiankuohaophpcn/smallyoujiankuohaophpcn
CDATA 不是 PCDATA 的反义词,别混淆三类“CDATA”
这个词容易误用,其实 XML 中有三种不同语境下的 CDATA:
-
DTD 属性类型 CDATA:写在
!ATTLIST里,表示该属性值是普通字符串(如),但它仍会被解析器检查语法,&、还是要转义 -
CDATA 节():写在 XML 文档内容里,用于包裹一段完全不解析的原始文本,比如代码、HTML 片段。里面可自由写 、
a > b、,无需转义- PCDATA 和 CDATA 都不是数据值,而是内容模型标识符:它们不描述“存了什么”,而描述“怎么处理这段内容”
关键区别一句话说清
PCDATA 是要解析的文本内容(元素里),CDATA(在 DTD 中)是要解析的字符串属性类型,而 是跳过解析的文本块(仅用于元素内容)。三者层级不同、位置不同、作用也不同。
什么时候该用 ?
当你有一段内容本身含大量 XML 特殊字符,又不想手动转义几十次时用它:
- 嵌入 JavaScript 代码:
- 放 HTML 片段:
Hello world]]> - 注意:CDATA 节不能嵌套,不能出现在属性值里,也不能跨元素边界
基本上就这些。记牢一点:PCDATA 关心“怎么解析”,CDATA 节关心“干脆不解析”,而 DTD 里的 CDATA 属性只是说“这是字符串,但照样要守 XML 规则”。不复杂但容易忽略细节。










