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

作者: 叶子的翅膀 | 来源:发表于2015-01-14 23:42 被阅读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转义序列表示这些特殊字符

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

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

    备注

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

    相关文章

      网友评论

        本文标题:xml配置文件中特殊字符的处理

        本文链接:https://www.haomeiwen.com/subject/gmkcxttx.html