<salary>if salary < 1000 then</salary>
<url>http://www.baidu.com/s?bs=zuozhuan&wd=%D7%F3%D7%AC</url>
前者的XML元素直接使用了小于号“<”,后者使用了和号“&”,这样的XML会产生解析错误。为避免此类错误,专业说法是用这些特殊字符的实体引用来代替。
正确的写法,小于号“<”应该用“<”代替,和号“&”应该用“&”代替,这两个字符必须用实体引用代替。
另外还有大于号、单引号和双引号,这3个特殊字符可以存在于XML中,不会引起解析错误,但是将他们分别替换为实体引用“>”、“'”、 “"”是更加符合标准的语法。
再介绍一种解决此类解析错误的方法:使用CDATA部件,前面的两个例子可以这么写:
<salary><![CDATA[if salary < 1000 then]]></salary>
<url><![CDATA[http://www.baidu.com/s?bs=zuozhuan&wd=%D7%F3%D7%AC]]></url>
原理就是CDATA部件包含的内容会被解析器忽略,CDATA区块由 <![CDATA[ 开始,以 ]]> 结束。CDATA区块内部不可以再出现 ]]> 这样的字符串,这也意味着CDATA部件禁止嵌套使用。
本文的两个例子使用实体引用比较合适。如果文本中间大量出现“<”“&”符号,例如一些条件判断的程序代码,逐一替换实体引用就不如直接用CDATA部件把整段代码包含起来更直观。