MyBatis異常:元素內容必須由格式正確的字元資料或標記組成
阿新 • • 發佈:2018-11-19
今天在寫介面查詢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 中僅有字元 “<“和”&” 是非法的。省略號、引號和大於號是合法的,但是把它們替換為實體引用是個好的習慣。 <![CDATA[ ]]>使用注意:
CDATA 部分不能包含字串 “]]>”。也不允許巢狀的 CDATA 部分。
標記 CDATA 部分結尾的 “]]>” 不能包含空格或折行。