一、什么是XML
英文全称为Extensible Markup Language,翻译过来为可扩展标记语言。现实生活中存在着大量的数据,在这些数据之间往往存在一定的关系,我们希望能在计算机中保存和处理这些数据的同时能够保存和处理他们之间的关系。XML就是为了解决这样的需求而产生的数据存储格式。
在XML语言中,它允许用户自定义标签。每一个标签用于描述一段数据。一个标签可以分为开始标签和结束标签,在开始标签和结束标签之间又可以嵌套其它标签,利用标签间的嵌套关系来保存数据之间的上下级关系;由于XML实质上是一段字符串,计算机可以十分方便的对他进行操作,开发人员也可以方便的阅读,因此可以说这是一种对人、对计算机都友好的数据存储格式,所以XML迅速普及,成为了一种非常常见的数据存储格式,在许多应用场景中得到应用。
二、xml的应用场景
1、传输数据
XML本质上是一段字符串,具有跨平台性的特性,因此XML常被用来在不同系统之间进行数据交换。一个典型的android应用是由服务器发送信息给android客户端后,由android客户端负责展示。此时,android客户端是java+android开发环境的。而服务器端很可能是C#+windows开发环境。如何在不同的语言、不同操作系统之间传输数据呢?XML就是一个很好的选择。
2、配置文件
XML可以在保存数据的同时保存数据之间的关系。利用这一特点,它还经常用作应用程序配置文件来使用。
三、XML检验
浏览器除了内置HTML解析器外还内置了XML解析器,因此我们可以使用浏览器对XML进行校验。
四、HTML和XML的区别
(一)语法要求不同
- 在HTML中不区分大小写,在XML中严格区分。
- 在HTML中,有时不严格,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略或者
- 之类的结束标记。在XML中,是严格的树状结构,绝对不能省略掉结束标记。
- 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个/ 字符作为结尾。这样分析器就知道不用查找结束标记了。
- 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
- 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。
- 在XML文档中,空白部分不会被解析器自动删除;但是HTML是过滤掉空格的。
(二)标记不同
1、HTML使用固有的标记;而XML没有固有的标记。
2、HTML标签是预定义的;XML标签是免费的、自定义的、可扩展的。
(三)作用不同
- HTML是用来显示数据的;XML是用来描述数据、存放数据的,所以可以作为持久化的介质!HTML将数据和显示结合在一起,在页面中把这数据显示出来;XML则将数据和显示分开。 XML被设计用来描述数据,其焦点是数据的内容。HTML被设计用来显示数据,其焦点是数据的外观。
- XML 不是HTML的替代品,XML 和HTML是两种不同用途的语言。 XML 不是要替换 HTML;实际上XML 可以视作对 HTML 的补充。XML 和HTML 的目标不同HTML 的设计目标是显示数据并集中于数据外观,而XML的设计目标是描述数据并集中于数据的内容。
- 没有任何行为的XML。与HTML 相似,XML 不进行任何操作。(共同点)
- 对于XML最好的形容可能是: XML是一种跨平台的,与软、硬件无关的,处理与传输信息的工具。
- XML未来将会无所不在。XML将成为最普遍的数据处理和数据传输的工具。
五、XML的语法
xml的语法:文档声明、元素、属性、注释、CDATA区(转义字符)、处理指令
(一)文档声明
用来声明XML 的基本属性,用来指挥解析引擎如何去解析当前XML 。通常一个XML 都要包含并且只能包含一个文档声明。XML 的文档声明必须在整个XML 的最前面,在文档声明之前不能有任何内容。
<?xml version="1.0" ?>
version是必须存在的属性,表明当前xml所遵循规范的版本,目前位置都写1.0就可以了。
<?xml version="1.0" encoding="utf-8" ?>
一定要保证xml格式的数据在保存时使用的编码和解析时使用的编码必须一致,才不会有乱码问题
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
standalone属性用来指明当前xml是否是一个独立的xml,默认值是yes表明当前文档不需要依赖于其他文档,
如果当前文档依赖其他文档而存在则需要将此值设置为no
(二)元素
元素的语法
- 一个XML 标签就是一个元素
- 一个标签分为开始标签和结束标签
- 在开始标签和结束标签之间可以包含文本内容,这样的文本内容叫做标签体
- 如果标签的开始标签和结束标签之间不包含标签和子标签则可以将开始标签和结束标签进行合并,这样的标签就叫做自闭标签
- 一个标签中也可以包含任意多个子标签,但是一定要注意标签一定要合理嵌套
- 一个格式良好的XML 要包含并且只能包含一个根标签,其他的标签都应该是这个标签的子孙标签
元素的命名
- 区分大小写,例如,
<C>
和<c>
是两个不同的标记。 - 不能以数字或标点符号或”_”开头。
- 不能以xml(或XML、或Xml 等)开头。
- 不能包含空格
- 名称中间不能包含冒号(:)。
(三)属性
- 一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如:
<china capital="beijing"/>
- 属性的名在定义时要遵循和XML 元素相同的命名规则
- 属性的值需要用单引号或双引号括起来
(四)注释
- 注释可以出现在XML 文档的任意位置除了整个文档的最前面,不能出现在文档声明之前。
- 注释不能嵌套注释。
(五)CDATA区/转义字符
当XML中一段内容不希望被解析器解析时可以使用CDATA区将其包住。当解析器遇到CDATA区时会将其内容当作文本对待,不会进行解析
语法:<![CDATA[ 内容 ]]>
转义字符:
& --> &
< --> <
> --> >
" --> "
' --> '
( 六)处理指令
处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。
<?xml-stylesheet type="text/css" href="1.css"?>
六、XML的两种解析思想
XML编程: 利用java程序去增删改查(CRUD) XML 中的数据。
解析思想: DOM解析和SAX解析
1、DOM解析
DOM(Document Object Model) 它是 W3C 组织推荐的处理 XML 的一种方式。它会将整个XML使用类似树的结构保存在内存中,再对其进行操作,所以它需要等到XML完全加载进内存才可以进行操作。它的缺点是耗费内存,当解析超大的XML时慎用。优点是可以方便的对XML 进行增删改查的操作。
在java SE的api提供了org.w3c.dom包里面有Node接口,此接口中提供了很多增删改查节点的方法,而所有文档树的对象都实现这个接口。
2、SAX解析
这种解析方式会逐行地去扫描XML文档,当遇到标签时会触发解析处理器,采用事件处理的方式解析XML (Simple API for XML) ,不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。优点是:在读取文档的同时即可对XML进行处理,不必等到文档加载结束,相对快捷。不需要加载进内存,因此不存在占用内存的问题,可以解析超大XML。缺点是:只能用来读取XML中数据,无法进行增删改。
它需要解析器和事件处理器,其中事件处理器里面的操作需要开发人员实现,注册到解析器中,解析器逐行扫描XML文件会调用事