1. 程式人生 > >MyBatis異常:元素內容必須由格式正確的字元資料或標記組成

MyBatis異常:元素內容必須由格式正確的字元資料或標記組成

今天在寫介面查詢SQL時,報了一個異常,如下:
Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 242; 元素內容必須由格式正確的字元資料或標記組成。

經查資料,發現是由於查詢語句中"<“和”>"引起的,在mybatis對映檔案中直接使用這些運算子會引起解析錯誤,跟標籤衝突。

錯誤部分sql

where ei.no = #{no} and qi.quote_time < pi.pricing_time

解決:用 <![CDATA[ ]]> 把 加括號 包裹起來或使用 &<;

正確寫法

where ei.no = #{no} and ==<![CDATA[qi.quote_time < pi.pricing_time]]>

探究XML中CDATA與轉義字元

對於<![CDATA[ ]]>:
所有 XML 文件中的文字均會被解析器解析。只有 CDATA 區段(CDATA section)中的文字會被解析器忽略。

轉義字元:
非法的 XML 字元必須被替換為實體引用(entity reference)。

XML 中5 個預定義的實體引用:
XML 中5 個預定義的實體引用


嚴格地講,在 XML 中僅有字元 “<“和”&” 是非法的。省略號、引號和大於號是合法的,但是把它們替換為實體引用是個好的習慣。

<![CDATA[ ]]>使用注意:

CDATA 部分不能包含字串 “]]>”。也不允許巢狀的 CDATA 部分。
標記 CDATA 部分結尾的 “]]>” 不能包含空格或折行。