一、原因:
XML 文檔中放置了一個類似 “<” 字符,那么這個文檔會產生一個錯誤,這是因為解析器會把它解釋為新元素的開始。因此你不能這樣寫:
<select id="selectUnTopAllMessages" parameterType="java.util.Map" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from guestbook_message where is_del = 'N' and wall_id = #{wallId} and (is_top = 0 or (is_top = 1 and top_expire_time < now())) order by id desc </select>
正確的寫法是這樣:
<select id="selectUnTopAllMessages" parameterType="java.util.Map" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from guestbook_message where is_del = 'N' and wall_id = #{wallId} and (is_top = 0 or (is_top = 1 and top_expire_time <![CDATA[ < ]]> now())) order by id desc </select>
二、其他
XML 文檔中的文本均會被解析器解析,只有 CDATA 區段(CDATA section)中的文本會被解析器忽略。
術語 CDATA 指的是不應由 XML 解析器進行解析的文本數據(Unparsed Character Data)。
在 XML 元素中,”<” 和 “&” 是非法的。
“<” 會產生錯誤,因為解析器會把該字符解釋為新元素的開始。
“&” 也會產生錯誤,因為解析器會把該字符解釋為字符實體的開始。
在 XML 中有 5 個預定義的實體引用:
< < 小於 > > 大於 & & 和號 ' ' 省略號 " " 引號
注釋:嚴格地講,在 XML 中僅有字符 “<”和”&” 是非法的。省略號、引號和大於號是合法的,但是把它們替換為實體引用是個好的習慣。