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