XML中的PCDATA是什么 PCDATA和CDATA的区别

PCDATA 是被解析的字符数据,XML 解析器会识别实体、解析子元素、将

PCDATA 是“Parsed Character Data”的缩写,意思是“被解析的字符数据”。它出现在 XML 元素的内容中(即开始标签和结束标签之间),XML 解析器会逐字检查这部分文本:识别并处理实体(如 &)、解析嵌套的子元素、把 当作标签起始符来对待。所以,如果你在 PCDATA 里直接写 &,解析器会报错,必须用对应实体代替。

PCDATA 主要用在元素声明中

在 DTD 中,用 #PCDATA 表示该元素允许纯文本,或文本与子元素混合。例如:

  • :表示 里只能放文本(需转义特殊字符)
  • :表示可混排文本和子元素,全部内容都会被解析

CDATA 是“未被解析的字符数据”,但分两种语境

注意:术语 CDATA 在 XML 中有两层含义,容易混淆,必须分开理解:

  • 属性类型中的 CDATA:在 DTD 的 ATTLIST 声明里,CDATA 表示该属性值是普通字符串,但 >&"' 仍有语法意义——比如引号仍用于包裹属性值,& 后若跟合法实体名(如  )仍会被展开。它不是“完全不解析”,而是“按属性规则解析”。
  • CDATA 节(:这才是真正“跳过解析”的机制。写在元素内容里,解析器会原样保留其中所有字符, 不当标签、& 不当实体起始、连 ]]> 之外的 > 都不处理。适合嵌入代码、HTML 片段等含大量特殊符号的内容。

关键区别一句话总结

#PCDATA 是元素内容的默认解析模式;CDATA 作为属性类型,是属性值的通用字符串声明;而 是元素内容中的一块“免解析区域”,三者作用对象和解析行为完全不同。

实际使用时,要根据位置选:定义元素内容结构用 #PCDATA,定义属性类型用 CDATA,想原样保留大段含 & 的文本就用