xml文档中<![CDATA[]]>的用法

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xml文档中<![CDATA[]]>的用法相关的知识,希望对你有一定的参考价值。

文章目录

<![CDATA[]]>用法

<![CDATA[]]>这个标记所包含的内容将表示为纯文本,⽐如<![CDATA[<]]>表⽰⽂本内容“<”。

此标记⽤于xml⽂档中,我们先来看看使⽤转义符的情况。我们知道,在xml中,”<”、”>”、”&”等字符是不能直接存⼊的,否则xml语法检查时会报错,如果想在xml中使⽤这些符号,必须将其转义为实体,如”<”、”>”、”&”,这样才能保存进xml⽂档。

在使⽤程序读取的时候,解析器会⾃动将这些实体转换回”<”、”>”、”&”。举个例⼦:

age < 30 

上⾯这种写法会报错,应该这样写:

 <if test="age != null and age != 0">
     age <![CDATA[<]]> 30 
 </if>

值得注意的是:

(1) 转义序列字符之间不能有空格;
(2) 转义序列必须以”;”结束;
(3) 单独出现的”&”不会被认为是转义的开始;
(4) 区分⼤⼩写。

在XML中,需要转义的字符有:

(1) & 
(2) < 
(3) > 
(4) " 
(5) ' 

但是严格来说,在XML中只有”<”和”&”是⾮法的,其它三个都是可以合法存在的,但是,把它们都进⾏转义是⼀个好的习惯。

不管怎么样,转义前的字符也好,转义后的字符也好,都会被xml解析器解析,为了⽅便起见,使⽤<![CDATA[]]>来包含不被xml解析器解析的内容。但要注意的是:

(1) 此部分不能再包含”]]>”;
(2) 不允许嵌套使⽤;
(3)”]]>”这部分不能包含空格或者换⾏。

最后,说说<![CDATA[]]>和xml转移字符的关系,它们两个看起来是不是感觉功能重复了?

是的,它们的功能就是⼀样的,只是应⽤场景和需求有些不同:

(1)<![CDATA[]]>不能适⽤所有情况,转义字符可以;

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

(3) <![CDATA[]]>表⽰xml解析器忽略解析,所以更快。

mybatis中<![CDATA[ ]]> 的作用

在使⽤mybatis 时我们sql是写在xml 映射⽂件中,如果写的sql中有⼀些特殊的字符的话,在解析xml⽂件的时候会被转义,但我们不希望他被转义,所以我们

要使⽤<![CDATA[ ]]>来解决。

<![CDATA[ ]]> 是什么,这是XML语法。在CDATA内部的所有内容都会被解析器忽略。

如果⽂本包含了很多的"<“字符 <=和”&"字符——就象程序代码⼀样,那么最好把他们都放到CDATA部件中。

但是有个问题那就是 ><= 等这些标签都不会被解析,所以我们只把有特殊字符的语句放在 <![CDATA[ ]]> 里, 尽量缩⼩ <![CDATA[ ]]> 的范围。

实例如下:

<![CDATA[
SELECT id,name,sex
FROM user
WHERE 1=1 AND 
startday > #startTime AND 
endday <= #endTime 
]]> AND 
name=#name 

因为这⾥有 “>” “<=” 特殊字符所以要使⽤ <![CDATA[]]> 但是><=等标签不被解析,因此不要放在<![CDATA[]]>外面

以上是关于xml文档中<![CDATA[]]>的用法的主要内容,如果未能解决你的问题,请参考以下文章

XML CDATA的作用

java解析XML① 之DOM解析和SAX解析(包含CDATA的问题)

XmlDocument

PHP处理XML文档,没有CDATA部分数据处理

区分XML中CDATA和#PCDATA

JDOM 如何修改XML文档中的CDATA段数据