前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在xml中特殊符号处理<![CDATA[ ]]>

在xml中特殊符号处理<![CDATA[ ]]>

作者头像
botkenni
发布2023-11-09 08:34:00
9250
发布2023-11-09 08:34:00
举报
文章被收录于专栏:IT码农IT码农

在xml中,不能存在如下的特殊字符:

大于等于符号:>=

小于等于符号:<=

不等于符号:<>

大于符号:>

小于符号:<

且符号:&

英文双引号符号:"

英文单引号符号:'

如果xml中需要写入特殊符号,则需要添加<![CDATA[]]>。

2. 概述<![CDATA[ ]]>

上文提到了<![CDATA[]]>,那么,我就简要概述它。

被<![CDATA[]]>这个标记,所包含的内容将表示为纯文本,比如<![CDATA[ < ]]>表示文本内容"<"。

平时在mybatis的映射文件写sql时,很多时候都需要写一些特殊的字符。例如:<字符、>字符、>=字符、<=字符,但是在xml文件中并不能直接写上述列举的字符,否则就会报错。

因为在解析xml文件时,我们如果书写了特殊字符,在没有特殊处理的情况下。

这些字符会被转义,但我们并不希望它被转义,所以我们要使用<![CDATA[ ]]>来解决。

那为什么要这样书写呢?<![CDATA[ ]]>是XML语法,在CDATA内部的所有内容都会被解析器忽略。

所以,当我们在xml文本中包含了很多的<、<= 和 &字符,就像程序代码一样,那么最好把他们都放到CDATA部件中。

3. 书写规范 需要注意的问题就是,在我们的mybatis的映射文件中,以下<where>、<select> 等这些标签都不会被解析,所以,我们只把有特殊字符的语句放在<![CDATA[ ]]>中,尽量缩小<![CDATA[ ]]>的范围。

因而,我在上文的sql语句中,存在不等于符号(<>),那么,我可以进行如下修改: <select id="queryByUsernameAndId" resultType="com.test.entity.po.User">     SELECT          *      FROM          `user`     <where>         username = #{username}         AND id <![CDATA[ <> ]]> #{userId}         and deleted = 0         and user_status = 1 LIMIT 1     </where> </select>

4. 文末总结

不管怎么样,转义前的字符也好,转义后的字符也好,都会被xml解析器解析。

为了方便起见,使用<![CDATA[]]>来包含不被xml解析器解析的内容。

但要注意的是:

此部分不能再包含]]>

不允许嵌套使用

]]>这部分不能包含空格或者换行。

最后,说说<![CDATA[]]>和xml转移字符的关系,它们两个看起来是不是感觉功能重复了? 是的,它们的功能就是一样的,只是应用场景和需求有些不同:

<![CDATA[]]>不能适用所有情况,转义字符可以

对于短字符串<![CDATA[]]>写起来啰嗦,对于长字符串转义字符写起来可读性差;

<![CDATA[]]>表示xml解析器忽略解析,所以更快。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档