本文主要介绍xml中CDATA作用。
为了解决属性值中使用XML中的特殊字符,xml使用类似的转义字符去描述。
字符
转移字符
<
<
>
>
&
&
'
'
"
"
CDATA段
在某些情况下,我们在xml中要使用大量XML敏感的字符,而我们又不希望逐一的对其进行转移。这时候使用CDATA段是最理想的。
1)语法格式:< ! [ CDATA [忽略检查的文本]]>
2)在CDATA中将文本的内容写入,那么这段文本内容会被忽略检查,无论里面是否包含XML敏感内容,全部被当作普通的文本去看待。例如:
] ] >
CDATA的定义:
CDATA DTD的属性类型,全名character data,指不由xml解析器进行解析的文本数据。在标记的CDATA下,所有的标记、实体引用(特殊字符)都会被忽略,而被当作字符数据来看待。
CDATA的形式:
CDATA的形式如下: CDATA的文本内容中不能出现字符串“]]>”,也不能嵌套。 CDATA区域是由“”为结束标记,注意CDATA为大写。
DTD实例:
指定类型为CDATA以后就可以在XML中被用于实例,例如下面payment 元素的type属性被指定为CDATA类型后在XML中就可以赋于”check”的字符数据。
1
XML 实例:
在CDATA标记中的信息被解析器原封不动地传给应用程序,并且不解析该段信息中的任何控制标记。例如:
1
而解析器会把它分解为像这样的子元素:
1
2
3
4
转义字符:
非法的xml字符必须被替换为实体引用(entity reference)。如果在XML文档中使用类似”< ” 的字符, 那么解析器将会出现错误,因为解析器会认为这是一个新元素的开始。所以不应该象下面那样书写代码:
1
为了避免出现这种情况,必须将字符”< ” 转换成实体,象下面这样:
1
在 XML 中有 5 个预定义的实体引用:
< < 小于号
> > 大于号
& & 与(和)号
' ' 单引号
" " 双引号
1
2
3
4
5
注释:严格地讲,在 XML 中仅有字符 “<”和”&” 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。
---------------------
CDATA
CDATA 全名:character data。所有 XML 文档中的文本均会被解析器解析,除了 CDATA 区段(CDATA section)中的文本会被解析器忽略。
CDATA的形式如下: 。
CDATA的文本内容中不能出现字符串“]]>”。另外,CDATA不能嵌套。
XML 实例: 在CDATA标记中的信息被解析器原封不动地传给应用程序,并且不解析该段信息中的任何控制标记。 CDATA区域是由“”为结束标记,注意CDATA为大写。
QDom 解析 xml 中的CDATA
例如 解析下面的 Data 节点中的 CDATA,并将图片数据加载到内存中:
QDomText text = elem.firstChild().toText();
QByteArray data = text.data().toUtf8();
data = QByteArray::fromBase64(data);
if(!data.isEmpty()){
QPixmap pix;
pix.loadFromData(data);
image->setBitmap(pix);
}
或者
QSring data= elem.firstChild().nodeValue();
QByteArray bitData = data.toUtf8();
bitData = QByteArray::fromBase64(bitData);
pix.loadFromData(bitData);
---------------------
转自:https://blog.csdn.net/qq_33266987/article/details/54288051
https://blog.csdn.net/lmb55/article/details/52761273
https://blog.csdn.net/psp0001060/article/details/50582031