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 部分结尾的 “]]>” 不能包含空格或折行。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值