xml配置文件中特殊字符的处理

问题

在项目开发中,使用到了ibatis作为项目的数据库访问持久层。在sqlmap的XML配置文件中编写一条SQL语句时,遇到这样的问题:where条件中包括了判断出生日期在某一段时间内。
刚开始我是这么写的

<isNotEmpty property="ageBeginTime" prepend=" and ">
             A.CSRQ>=#ageBeginTime#
</isNotEmpty>
<isNotEmpty property="ageEndTime" prepend=" and ">
           A.CSRQ<=#ageEndTime#
 </isNotEmpty>

此时IDE就报出了配置出错的信息
通过查阅资料,明白是判断条件中的大于>和小于<出错,它会使XML解析器产生混淆。也就像JSON格式中出现双引号会使得格式出错的场景。
那么解决办法,也就是对大于和小于进行转义,将大于号>改为&gt;、小于号<改为&lt;
另外在查阅资料中,在看别人写的SQL中,使用到的是下面这种方法来防止特殊字符的。

 <isNotEmpty property="ageBeginTime" prepend=" and ">
            <![CDATA[ A.CSRQ>=#ageBeginTime# ]]>
 </isNotEmpty>
 <isNotEmpty property="ageEndTime" prepend=" and ">
            <![CDATA[ A.CSRQ<=#ageEndTime# ]]>
 </isNotEmpty>

通过<![CDATA[条件值]]>来解决此问题。
当时没有深究,也就这么用了。后来今天在一本书看到了关于此问题更详细的描述。

处理方式

在XML中有5个特殊的字段,分别是: & < > " '
如果XML配置文件中的注入值包括这一些特殊字符的话,就需要特别的处理。
处理方式有两种:
1、使用<![CDATA[]]>这个标签将包括特殊字符的注入值封装起来
2、使用XML转义序列表示这些特殊字符

五个符号的转义序列如下:

  • 小于号<对应的是&lt;
  • 大于号>对应的是&gt;
  • 联结符&对应的是&amp;
  • 双引号"对应的是&quot;
  • 单引号'对应的是&apos;

备注

在MarkDown中为防止&gt;被直接解析成了;,可以采用`符号将其包裹起来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容