在XML中只有字符"<" 和 "&"在XML里是严格意义上非法的。省略符,引号和更高级的符号是合法的,
非法XML字符必须由实体替代。在XML里,有5个预先定义的实体说明:
< | < | 大于号 |
> | > | 小于号 |
& | & | 和号 |
' | ' | 单引号 |
" | " | 双引号 |
在XML中字符"<"和"&"是非法的,因此如果在一份XML元素中放一个"<"字符,就会产生错误,因为解析器会认为它是新元素的开始,所以不可以写成这样:
<message>if salary < 1000 then</message>
为了避免这个,你必须用一个实体说明来代替,就象这样:
<message>if salary < 1000 then</message>
如果出现次数少还能接受,但是如果出现<这样的字符多了,这样写比较麻烦,XML的CDATA这种解决了这个问题。CDATA内部的所有东西都会被解析器忽略。
假如您的文本中包含了大量的"<"和"&"字符 - 就像编程代码中经常出现的情况一样 - 那么这个XML元素就可以被定义为一个CDATA部分。
格式:<![CDATA[不会被解析的内容]]>
应用举例:
(1)如果在XML文档当中要包括"<TD></TD>"这个内容的时候。我们就可以把它放在CDATA当中。
如:<![CDATA[<TD></TD>]]>
(2)如果想在XML文档当中插入一段JS脚本,也可以放在CDATA当中。
(3)由于XML是原封不动,所以CDATA区的开始和结尾标记处有无空格和换行是不一样的!!例如:
注意事项:
(1)由于xml是大小写敏感的,所以CDATA区不能写成cdata或Cdata等.
(2)CDATA区内部不能出现"]]>"字符串,如果文本中恰好有这些内容,可以把要嵌套的"]]>"分隔成两部分,即拆成两个 CDATA,选任一中间为分隔,
例:如果要表达"[ a]]>b ]]"这个字符串,那么可以写成:
<![CDATA[ a]]]]> <![CDATA[>b]]>
或
<![CDATA[ a]]]> <![CDATA[]>b]]>
(3)这里和html中不完全一样,在html中空格用 来表示,但是在xml中却不需要这样做,因为xml会将空格和换行都作如实处理,而不是像html那样忽略.