XML定义:扩展标记语言 (Extensible Markup Language, XML)
用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。XML是标准通用标记语言 (SGML) 的子集,非常适合Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
特性:
-
扩展标记语言 (Extensible Markup Language)
-
一种标记语言,很类似HTML
-
设计宗旨是传输数据,而非显示数据
-
自行定义标签
-
被设计为具有自我描述性
JSON定义:JSON(JavaScript Object Notation)一种轻量级的数据交换格式
具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。这些特性使JSON成为理想的数据交换语言
特性:
- JavaScript Object Notation 是一种轻量级的数据交换格式
- 易于人阅读和编写;
- 同时也易于机器解析和生成;
- 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition – December 1999 的一个子集。
- JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)
JSON和XML的轻/重量级的区别
- JSON只提供整体解析方案,而这种方法只在解析较少的数据时才能起到良好的效果;
- 而XML提供了对大规模数据的逐步解析方案,这种方案很适合于对大量数据的处理
数据格式编码及解析的难度
- 主观:JSON更为清晰且冗余更少些;
- 总体:XML比较适合于标记文档,而JSON却更适于进行数据交换处理;
- 解析:XML,都常常导致复杂的代码,极低的开发效率;
- 实际:对于大多数web应用来说,根本不需要复杂的XML来传输数据
XML语法格式
- XML文档声明
- 标记 ( 元素 / 标签 / 节点) XML文档,由一个个的标记组成.
语法:
开始标记(开放标记): <标记名称> 结束标记(闭合标记): </标记名称>
标记名称:
1.名称可以含字母、数字以及其他的字符
2.名称不能以数字或者标点符号开始
3.名称不能以字符 “xml”(或者 XML、Xml)开始
4.名称不能包含空格,不能包含冒号(:)
5.名称区分大小写
标记内容:
自定义名称,必须遵循以下命名规则:开始标记与结束标记之间,是标记的内容。
例如,我们通过标记,描述一个人名:
李伟杰
- 一个XML文档中, 必须有且且仅允许有一个根标记.
正例:
<name>张三</name>
<name>李四</name>
反例:
李四
麻子
- 标记可以嵌套, 但是不允许交叉.
正例:
<name>李四</name>
<age>18</age>
反例:
<name>李四<age>
</name> 18</age>
- 标记的层级称呼 (子标记, 父标记 , 兄弟标记, 后代标记 ,祖先标记) 例如:
<person>
<name>李四</name>
<length>180cm</length>
</person>
<person>
<name>李四</name>
<length>200cm</length>
</person>
name是person的子标记,也是person的后代标记;name是persons的后代标记;name是length的兄弟标记;person是name的父标记;persons是name的祖先标记。
-
标记名称 允许重复
-
标记除了开始和结束,还有属性。
标记中的属性,在标记开始时 描述,由属性名和属性值组成。
格式:
在开始标记中,描述属性。
可以包含0-n个属性,每一个属性是一个键值对!
属性名不允许重复,键与值之间使用等号连接,多个属性之间使用空格分割,属性值必须被引号引住。
案例:
<person id="10001" groupid="1">
<name>李四</name>
<age>18</age>
</person>
<person id="10002" groupid="1">
<name>李四</name>
<age>20</age>
</person>
- 注释 注释不能写在文档文档声明前
注释不能嵌套注释
格式:
注释开始: <!-注释结束: -->
案例:
描述一组图书books, 至少包含3本书 图书book包含 图书名称name 图书简介info , 以及属性id
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="1001">
<name>金苹果</name>
<info>锄禾日当午</info>
</book>
<book id="1002">
<name>银苹果</name>
<info>汗滴禾下土</info>
</book>
<book id="1002">
<name>铜苹果</name>
<info>谁知盘中餐</info>
</book>
</books>
Java解析XML面试题
Java中有几种XML解析方式 ? 分别是什么 ? 有什么样的优缺点 ?
四种。
1. SAX解析
SAX解析器,解析方式是事件驱动机制!逐读取XML文件解析,每当解析到一个标签的开始/结束/内容/属性时触发事件。
我们可以编写程序在这些事件发生时,进行相应的处理。
优点:
分析能够立即开始,而不是等待所有的数据被处理
逐行加载,节省内存,有助于解析大于系统内存的文档
有时不必解析整个文档,它可以在某个条件得到满足时停止解析
缺点:
单向解析,无法定位文档层次,无法同时访问同一文档的不同部分数据(因为逐行解析,当解析第n行是,第n-1行已经被释放了,无法在进行操作了)
无法得知事件发生时元素的层次,只能自己维护节点的父/子关系
只读解析方式,无法修改XML文档的内容
2. DOM解析
是用与平台和语言无关的方式表示XML文档的官方W3C标准,分析该结构通常需要加载整个文档和内存中建立文档树模型.程序员可以通过操作文档树,来完成数据的获取修改、删除等。
优点:
文档在内存中加载,允许对数据和结构做出更改
访问是双向的,可以在任何时候在树中双向解析数据
缺点:
文档全部加载在内存中,消耗资源大
3. JDOM解析
目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。