如何解决XML文件中特殊字符“& <”导致解析错误的问题

“&”与“<”这样的特殊字符直接放在XML元素中,会导致XML文件解析错误。如下所示:

  <salary>if salary < 1000 then</salary>

  <url>http://www.baidu.com/s?bs=zuozhuan&wd=%D7%F3%D7%AC</url>

前者的XML元素直接使用了小于号“<”,后者使用了和号“&”,这样的XML会产生解析错误。为避免此类错误,专业说法是用这些特殊字符的实体引用来代替。

正确的写法,小于号“<”应该用“&lt;”代替,和号“&”应该用“&amp;”代替,这两个字符必须用实体引用代替。

另外还有大于号、单引号和双引号,这3个特殊字符可以存在于XML中,不会引起解析错误,但是将他们分别替换为实体引用“&gt;”、“&apos;”、 “&quot;”是更加符合标准的语法。

 

再介绍一种解决此类解析错误的方法:使用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部件把整段代码包含起来更直观。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值