在处理XML数据时,特殊字符要特殊处理,不能和节点字符混淆。

所有 XML 文档中的文本均会被解析器解析。

只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。

PCDATA

PCDATA 指的是被解析的字符数据(Parsed Character Data)。

XML 解析器通常会解析 XML 文档中所有的文本。

当某个 XML 元素被解析时,其标签之间的文本也会被解析:

<message>此文本也会被解析</message>

解析器之所以这么做是因为 XML 元素可包含其他元素,就像这个例子中,其中的 <name> 元素包含着另外的两个元素(first 和 last):

<name><first>Bill</first><last>Gates</last></name>

而解析器会把它分解为像这样的子元素:

<name>

<first>Bill</first>

<last>Gates</last>

</name>

转义字符

非法的 XML 字符必须被替换为实体引用(entity reference)。

假如您在 XML 文档中放置了一个类似 "<" 字符,那么这个文档会产生一个错误,这是因为解析器会把它解释为新元素的开始。因此你不能这样写:

<message>if salary < 1000 then</message>

为了避免此类错误,需要把字符 "<" 替换为实体引用,就像这样:

<message>if salary &lt; 1000 then</message>

XML 中有 5 个预定义的实体引用:

&lt; < 小于
&gt; > 大于
&amp; & 和号
&apos; ' 单引号
&quot; " 双引号

注释:严格地讲,在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。

CDATA

术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。

在 XML 元素中,"<" 和 "&" 是非法的。

"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。

"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。

某些文本,比如 JavaScript 代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。

CDATA 部分中的所有内容都会被解析器忽略。

CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:

<script>

<![CDATA[

function matchwo(a,b)

{

if (a < b && a < 0) then

{

return 1;

}

else

{

return 0;

}

}

]]>

</script>

在上面的例子中,解析器会忽略 CDATA 部分中的所有内容。

关于 CDATA 部分的注释:

CDATA 部分不能包含字符串 "]]>"。也不允许嵌套的 CDATA 部分。

标记 CDATA 部分结尾的 "]]>" 不能包含空格或折行。

摘自:http://www.w3school.com.cn/xml/xml_cdata.asp

转载于:https://www.cnblogs.com/iampkm/p/3519338.html

XML 特殊字符处理和 CDATA相关推荐

  1. php过滤特殊字符mysql攻击_php – MySQL在特殊字符处切断字符串

    我正在尝试使用 PHP将远程POST数据(iSnare发送的文章)插入MySQL.数据来自远程POST发件人,我可以将其写入纯文本文件而不会出现问题. 不幸的是,当它将它插入MySQL时,MySQL会 ...

  2. [Python从零到壹] 三十七.图像处理基础篇之图像融合处理和ROI区域绘制

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  3. 阅读react-redux源码(五) - connectAdvanced中store改变的事件转发、ref的处理和pure模式的处理

    阅读react-redux源码 - 零 阅读react-redux源码 - 一 阅读react-redux源码(二) - createConnect.match函数的实现 阅读react-redux源 ...

  4. XML中PCDATA与CDATA的区别

    XML中PCDATA与CDATA的区别 2011-02-10 19:27:25|  分类: XML |  标签:xml中pcdata与cdata的区别     字号:大中小 订阅 所有 XML 文档中 ...

  5. 告别手动输入验证码!Web自动化测试带你解锁验证码处理和Cookie机制,跨越测试瓶颈!

    Web自动化之验证码处理及cookie机制 在Web自动化测试中,验证码的处理一直是一个难点.如果没有自动化处理方式,手动输入验证码将会非常耗时且容易出错.本文将为大家介绍如何通过Python实现验证 ...

  6. [Python从零到壹] 三十三.图像处理基础篇之什么是图像处理和OpenCV配置

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  7. golang框架gin的日志处理和zap lumberjack日志使用

    目录 gin自带日志 新建logger.go mian.go 引用 zap lumberjack接管gin日志 新建logger.go main.go 调用 gin框架好用,轮子也多,我也来丰富下内容 ...

  8. unity 3分钟理解 批处理和drawcall有什么区别

    3分钟理解 批处理和drawcall有什么区别? 本人技术有限,如有错误,请道友们留言讨论,切勿口吐芬芳. 正文-------------------------------------------- ...

  9. 千牛包表包下载_带有服务器端处理和VueJS组件的数据表包

    千牛包表包下载 Vue数据表 (Vue Data Table) Data Table package with server-side processing and VueJS components. ...

最新文章

  1. 维度变换--首先将矩阵倒过来
  2. CVE-2010-3333
  3. 概述VB.NET正则表达式简化程序代码
  4. 动态规划最常见的习题 (最长公共子串、最长公共子序列、最短编辑距离)
  5. python库(包)查找网站
  6. 一个有趣的关于flash和多种设备交互等技术应用的演示网站
  7. Android内存解析(二)— 详解内存,内部存储和外部存储
  8. Linux 内核打印级别
  9. sklearn 机器学习 Pipeline 模板
  10. 背板,线速,交换容量详细解说
  11. 已经围上为何不算目_万达为何至今不上市,并非王健林真的钱多,许家印的境遇说明一切...
  12. u深度重装系统详细教程_U深度U盘安装原版win7系统的图文教程
  13. 推荐10个让电脑「 效率高到爆炸 」的软件
  14. 隐藏部分内容,点击按钮显示全部内容
  15. Deep-learning augmented RNA-seq analysis of transcript splicing | 用深度学习预测可变剪切
  16. linux 查看磁盘分区格式
  17. 输入n个整数,输出其中的最大值
  18. 如何用ffmpeg截取视频片段截取时间不准确的坑
  19. 51 8位 单片机 定点数 除法 c语言,单片机C语言快速精度除法方案
  20. 08-认识margin

热门文章

  1. MYSQL的MERGE存储引擎
  2. mysql 使用位运算
  3. ASP.NET虚拟主机的重大安全隐患
  4. MFC给按钮添加皮肤
  5. 【ubuntu工具】bless:二进制查看工具,类似win下的UltraEdit
  6. jsp mysql 图片路径,请教JSP中怎么向MySql中存入和取出图片
  7. ios 代码设置控件宽高比_用宽高比调整UIImage的大小?
  8. python字典一键多值_python字典中如何一键多值的写入?
  9. 本地清除电脑缓存后,mongodb数据库无法连接
  10. web-view里面的网页能请求未配置的request域名吗