和转义字符的使用

数据的解析

在正式开始聊CDATA之前想先说说解析
XML文件在解析的时候,里面的内容也同样会被解析,例如我们在用MyBatis时,在mapper.xml中可能会用到“<”或者“>”,这样就造成了一些冲突,例如下面的代码

<select id="selectBydate" parameterType="String" resultType="user">
         select * from user where create_date <= #{createDate} 
select>

在这种情况下,解析器怎么去判断create_date < #{createDate}中的“<”是小于号,而不是表示一个标签的开始呢?

转义字符的处理

我们可以通过转义字符来处理XML文件中的特殊字符,常用的有:

转义字符 符号 含义
& lt; < 小于号
& gt; > 大于号
& amp; &
& apos; 单引号
& quot; 双引号

注:复制上面的转义字符时,把“&”后面的空格去掉。有看到网上说只有小于和&是不合法的,剩下的都是合法的,但还是推荐大家写转义。

把原本应该写符号的地方用转移字符代替,以“&”开头,以“;”结尾,中间没有空格
上面那段mapper就可以写成如下形式了:

<select id="selectBydate" parameterType="String" resultType="user">
         select * from user where create_date <= #{createDate} 
select>

这样解析器在解析的时候就会把“<;”当做“<”来处理。

< ![CDATA[]]>的使用

有趣的是markdown也支持 < ![CDATA[]]>的使用,如果我不在<后面加上空格,他就不会显示。

上面说了转义字符,那< ![CDATA[]]> 是做什么的呢?简单来说,他和转义字符的作用差不多,他告知解析器“< ![CDATA[“文本内容”]]> ”,”[]”中的内容都是我想要的,不要解析,不通过解析器去处理,他标记了其中的字符是纯文本

上面的代码如果用< ![CDATA[]]>处理可以写成:

<select id="selectBydate" parameterType="String" resultType="user">
         select * from user where create_date  #{createDate} 
select>

要注意的是< ![CDATA[]]>,“CDATA”是大写,且不能嵌套使用的,而且个人觉得嵌套使用也没什么意义。

在网上看到PCDATA,顺便提一下,他与CDATA的区别是什么呢?

CDATA是不交给解析器去处理,而PCDATA是交给解析器去处理。

你可能感兴趣的:(XML,xml,CDATA)