<![CDATA[]]>和转义字符
<![CDATA[]]>和转义字符
今天看代码发现之前从没见过的<![CDATA[]]>,遂来学习下
<![CDATA[]]>是什么
<![CDATA[]]> 是什么,这是XML语法。在CDATA内部的所有内容都会被解析器忽略。
<![CDATA[]]>干什么
在使用mybatis 时我们sql是写在xml 映射文件中,如果写的sql中有一些特殊的字符的话,比如"<"、">"、"&"、如果我们直接使用,XML语法检查会报错。
于是<![CDATA[]]>应运而生,他包起来的内容都会被解析器忽略
- 
案例:
<select ...> ... where time > #{startTime} </select>上面写法会报错,正确写法应该是
- 方式一:<![CDATA[]]>
 
<select ...> ... where <![CDATA[time > #{startTime}]]> </select>- 方式二:转义字符
 
<select ...> ... where time < #{startTime} </select> 
<![CDATA[]]>注意点
在XML中,需要转义的字符有:
| 字符 | 转义字符 | 
|---|---|
| & | & | 
| < | < | 
| > | > | 
| " | " | 
| ' | &apos | 
但是严格来说,在XML中只有”<”和”&”是非法的,其它三个都是可以合法存在的,但是,把它们都进行转义是一个好的习惯。
不管怎么样,转义前的字符也好,转义后的字符也好,都会被xml解析器解析,为了方便起见,使用<![CDATA[]]>来包含不被xml解析器解析的内容。但要注意的是:
- 此部分不能再包含
”]]>”; - 不允许嵌套使用;
 ]]>”这部分不能包含空格或者换行。
<![CDATA[]]>和转义字符的关系
最后,说说<![CDATA[]]>和xml转义字符的关系,它们两个看起来是不是感觉功能重复了?
是的,它们的功能就是一样的,只是应用场景和需求有些不同:
<![CDATA[]]>不能适用所有情况,转义字符可以;- 对于短字符串
<![CDATA[]]>写起来啰嗦,对于长字符串转义字符写起来可读性差; <![CDATA[]]>表示xml解析器忽略解析,所以更快。
参考
https://blog.csdn.net/qh_java/article/details/50755655?utm_source=copy

                
            
        
浙公网安备 33010602011771号