产品程序员我是程序员;您好程先生;叫我序员就好了

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

2015-01-14  本文已影响2372人  叶子的翅膀

问题

在项目开发中,使用到了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转义序列表示这些特殊字符

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

备注

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

上一篇 下一篇

猜你喜欢

热点阅读