xml文档中<![CDATA[]]>的用法
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xml文档中<![CDATA[]]>的用法相关的知识,希望对你有一定的参考价值。
文章目录
<![CDATA[]]>用法
被<![CDATA[]]>
这个标记所包含的内容将表示为纯文本,⽐如<![CDATA[<]]>
表⽰⽂本内容“<”。
此标记⽤于xml⽂档中,我们先来看看使⽤转义符的情况。我们知道,在xml中,”<”、”>”、”&”等字符是不能直接存⼊的,否则xml语法检查时会报错,如果想在xml中使⽤这些符号,必须将其转义为实体,如”<”、”>”、”&”,这样才能保存进xml⽂档。
在使⽤程序读取的时候,解析器会⾃动将这些实体转换回”<”、”>”、”&”。举个例⼦:
age < 30
上⾯这种写法会报错,应该这样写:
<if test="age != null and age != 0">
age <![CDATA[<]]> 30
</if>
值得注意的是:
(1) 转义序列字符之间不能有空格;
(2) 转义序列必须以”;”结束;
(3) 单独出现的”&”不会被认为是转义的开始;
(4) 区分⼤⼩写。
在XML中,需要转义的字符有:
(1) &
(2) <
(3) >
(4) "
(5) '
但是严格来说,在XML中只有”<”和”&”是⾮法的,其它三个都是可以合法存在的,但是,把它们都进⾏转义是⼀个好的习惯。
不管怎么样,转义前的字符也好,转义后的字符也好,都会被xml解析器解析,为了⽅便起见,使⽤<![CDATA[]]>来包含不被xml解析器解析的内容。但要注意的是:
(1) 此部分不能再包含”]]>”;
(2) 不允许嵌套使⽤;
(3)”]]>”这部分不能包含空格或者换⾏。
最后,说说<![CDATA[]]>和xml转移字符的关系,它们两个看起来是不是感觉功能重复了?
是的,它们的功能就是⼀样的,只是应⽤场景和需求有些不同:
(1)<![CDATA[]]>不能适⽤所有情况,转义字符可以;
(2) 对于短字符串<![CDATA[]]>写起来啰嗦,对于长字符串转义字符写起来可读性差;
(3) <![CDATA[]]>表⽰xml解析器忽略解析,所以更快。
mybatis中<![CDATA[ ]]> 的作用
在使⽤mybatis 时我们sql是写在xml 映射⽂件中,如果写的sql中有⼀些特殊的字符的话,在解析xml⽂件的时候会被转义,但我们不希望他被转义,所以我们
要使⽤<![CDATA[ ]]>
来解决。
如果⽂本包含了很多的"<“字符 <=和”&"字符——就象程序代码⼀样,那么最好把他们都放到CDATA部件中。
但是有个问题那就是 >
、<=
等这些标签都不会被解析,所以我们只把有特殊字符的语句放在 <![CDATA[ ]]> 里, 尽量缩⼩ <![CDATA[ ]]> 的范围。
实例如下:
<![CDATA[
SELECT id,name,sex
FROM user
WHERE 1=1 AND
startday > #startTime AND
endday <= #endTime
]]> AND
name=#name
因为这⾥有 “>” “<=” 特殊字符所以要使⽤ <![CDATA[]]>
但是>
、<=
等标签不被解析,因此不要放在<![CDATA[]]>
外面
以上是关于xml文档中<![CDATA[]]>的用法的主要内容,如果未能解决你的问题,请参考以下文章