天天看點

<![CDATA[]]>和轉義字元的使用和聯系

一、轉義方法介紹

第一種方法:

用了轉義字元把>和<替換掉,然後就沒有問題了。例如:

SELECT * FROM test WHERE 1 = 1 AND start_date  &lt; = CURRENT_DATE AND

end_date >= CURRENT_DATE

常用的轉義字元如下:

                     &lt;                      < 小于号
       &gt;                      >                                        大于号
          &amp;  &                      和
           &apos;   ’                      單引号
           &quot;                      "                      雙引号

  第二種方法:

因為這個是xml格式的,是以不允許出現類似“>”這樣的字元,但是都可以使用

<![CDATA[ ]]>符号進行說明,将此類符号不進行解析你的可以寫成這個:

mapper檔案示例代碼

<![CDATA[ when min(starttime)<='12:00' and max(endtime)<='12:00' ]]>  

二、兩種方式的說明:

在xml格式的檔案中,對于“>”、“<”等符号是作為特殊的符号使用的,是以當我們使用

這些符号的時候,往往不會正常的起作用,反而可能産生了文法錯誤。

而使用第一種方式需要注意以下幾個方面:

(1)轉義序列字元之間不能有空格; 

(2) 轉義序列必須以”;”結束; 

(3) 單獨出現的”&”不會被認為是轉義的開始; 

(4) 區分大小寫。 

2.使用<![CDATA[ ]]>符号相對于使用轉義符方法來說是更加高效的。因為,轉義前的字

符也好,轉義後的字元也好,都會被xml解析器解析,而使用<![CDATA[ ]]>符号來包含

不被轉義的内容,則是xml解析器能夠識别該符号為忽略解析的内容。

另外,使用<![CDATA[ ]]>符号需要注意以下幾個方面:

(1) 此部分不能再包含”]]>”; 

(2) 不允許嵌套使用; 

(3)”]]>”這部分不能包含空格或者換行。 

三、比較

  最後,說說<![CDATA[]]>和xml轉移字元的關系,它們兩個看起來是不是感覺功能

重複了? 

  是的,它們的功能就是一樣的,隻是應用場景和需求有些不同:

(1)<![CDATA[]]>不能适用所有情況,轉義字元可以; 

(2) 對于短字元串<![CDATA[]]>寫起來啰嗦,對于長字元串轉義字元寫起來可讀性差;

(3) <![CDATA[]]>表示xml解析器忽略解析,是以更快。

注:對于有人說在mybatis的映射檔案中,最好使用第二種方法,我還沒有找到相關依

據。如果,各位大神有什麼答案,或者什麼建議,還請不吝賜教。