详细解释之什么情况下用到CDATA和转义字符。

使用mybatis框架会在xml中写sql语句,如果sql中用到一些特殊字符的话(如直接使用:"<","&"...),XML 解析将会出现错误。

1、为什么会错误?

2、怎么避免直接使用特殊字符报错?

答1:之所以会报错是因为:

XML 解析器通常情况下会解析XML文档中的所有文本。

当某个XML元素被解析的时候,XML标签之间的文本也会被解析:

例1:user.xml:

 //select标签里边文本1会被解析,isNotEmpty 标签里边文本2会被解析,isNotNull 标签里边文本3会被解析

解析器之所以这么做是因为 XML 元素可包含其他元素,就像上边这个例子中,其中的 select * from user where 1=1 AND age=#age# AND username=#username#

假如在 XML 文档中放置了一个类似 "<" 字符,那么这个文档会产生错误,这是因为解析器会把它解释为新元素的开始。因此类似下边查询条件直接设置为 age<10 ,这种写法会报错:

答2:为了避免直接使用特殊字符报错:

正确写法:

方法1、使用转义字符转义成符号对应的实体:< (“;”后边封号必须加)相当于小于号 “<”:

如果在XML文档中使用类似"<" 的字符, 那么解析器将会出现错误,因为解析器会认为这是一个新元素的开始。为了避免出现这种情况,不合法的XML字符必须被替换为相应的实体。所以必须将字符"<" 转换成实体 "<" 。

注意:

1、实体必须以符号"&"开头,以符号";"结尾。
2、转义序列字符之间不能有空格。
3、区分大小写。

在 XML 中有 5 个转义字符分别代表对应的符号(实体):

< < 小于
> > 大于
& & 和号
' ' 省略号
" " 引号

严格的讲,在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的,但是写的时候直接都使用转义字符是个好的习惯,至少能避免出现其他问题。

但是不管转义前的字符也好,还是转义后的字符也好,都会被xml解析器解析;为了方便起见,使用输入文本]]>来包含不被xml解析器解析的内容。


方法2、语法格式:

< ! [ CDATA [忽略检查的文本:骗过xml解析器,不解析这里边的内容或者只是把这里边内容当成了普通文本]]>

什么是CDATA?

CDATA全名为character data,指不使用XML解析器解析的文本数据。在标记CDATA下,所有与XML规范冲突的关键字字符串都被XML处理程序一视同仁地当做字符数据看待,CDATA的形式如下:

1、格式:
2、其中文本内容中不能出现字符串“]]>”,另外CDATA不能嵌套。
3、 CDATA区域是由“”为结束标记,注意CDATA为大写。
4、”]]>”这部分不能包含空格或者换行。


 

你可能感兴趣的:(XML,CDATA的作用,转义字符的作用)