White space is required before the attribute type in the declaration of attribute "t" for element "bean".
PCDATA是将会被解析的文本,而CDATA是不会被解析的文本。
所以
(1)DTD中元素的类型常定义为PCDATA,因为元素内可能还包含子元素等内容,需要xml解析器对>,<,&,',"几个特殊字符进行解析。另外PCDATA中的实体会被展开,所以PCDATA常作为xml结构的一部分(子元素)。如果想在PCDATA中包含>,<,&,',"这些特殊字符就要使用实体(实体和实体引用的解析在最后)。
(2)属性的类型常定义为CDATA(不能为PCDATA),表示这部分内容不需要xml解析,实体也不会被展开(个人觉得说成实体引用不会被展开更好?)。因此xml中需要添加一段代码时可以将其类型指定为CDATA,这就相当于告诉xml解析器这一段内容不是给你看的(是给javascript引擎看的!)。
错误实例:
<!DOCTYPE config[
<!ELEMENT config (bean+)>
<!ELEMENT bean (k,v)>
<!ATTLIST bean t PCDATA #REQUIRED>
<!ELEMENT v (#PCDATA)>
<!ELEMENT k (#PCDATA)>
]>
<config>
<bean t="String">
<k>merchantNo</k>
<v>"m"</v>
</bean>
</config>
正确:
<!DOCTYPE config[ <!ELEMENT config (bean+)> <!ELEMENT bean (k,v)> <!ATTLIST bean t CDATA #REQUIRED> <!ELEMENT v (#PCDATA)> <!ELEMENT k (#PCDATA)> ]> <config> <bean t="String"> <k>merchantNo</k> <v>"m"</v> </bean>
</config>