数据传输语言 XML 与 Json
XML
为什么要学习xml?
不同软件之间的沟通语言,具有平台无关性,是一门独立的标记语言,
xml的作用:
1.网络数据传输
2.数据存储
3.配置文件
xml语法
1,xml文档声明
<?xml version="1.0" encoding="UTF-8"?>2,标记的命名规范
名称不能以数字或者标点符号开始
名字不能以字符’xml’或’XML’开始
名称不能包含空格,不能包含冒号(😃
名称区别大小写
3,一个文档中,必须且允许有一个根标记
4,标记允许嵌套,不允许交叉
5,标记名称允许重复
6,标记中可以有属性,在标记开始时描述属性,由属性名和属性这组成,由等于号连接键值对,在一个标记中属性名不能重复,
7,注释:
注释不能在文档声明前面使用
8,某些符号如 “<”,"&"在xml元素中是非法的,为了避免错误,可以将使用这些符号的内容由CDATA包裹
<![[CDATA 可能引起符号冲突的代码<a></a>]]>
解析xml方式
sax解析与dom解析
sax解析:逐行解析
逐行读取解析xml,每解析到一个内容时,会告知程序员,可以编写相应的程序处理.
优点:解析立即开始,不用等待多有数据被处理
逐行加载,节约内存
有时候不必解析整个文档,只需要在某个条件下停止解析;
缺点
单向解析,
无法得知元素的层次,只能程序员自己维护层次关系
只读解析,不能修改xml文档内容
dom解析:全文阅读,然后再解析
优点:文档在内存中加载,可以修改xml的数据
访问是双向的,可以在任何时候在树中双向解析数据;
缺点:
文档全部加载到内存,消耗资源大(可以忽略不计)
JDOM解析,
是java第一个特定文档解析,能简化对xml的操作
优点: 大量使用java 集合类,方便开发
缺点: 由于没有基于接口开发,没有较好的灵活性;
性能不是很优异
DOM4J解析
他是jdom的一个分支,具有性能优异,功能强大,易用等特点.
支持xpath,xml schema
DOM4J语法:
引入jar包:
dom4j.jar
xstream.jar
解析文档
1.创建xml的文件输入流
2.创建一个读取xml的工具对象: SAXReader
3使用SAXReader读取文档流对象,并得到Document对象
4.通Document对象,可以获取xml中的各个元素
通过网络资源解析xml
1,根据网站创建URL
URL url = new URL(" ");
2,打开连接
URLConnection conn = url.openConnection();
3,获取输入流
InputStream is = conn.getInputStream();
Document 文档对象 Element 元素对象
Document 指加载到内存的整个XML文档.
Element 是指XML文档的单个节点
方法名 | 作用 |
---|---|
Element getRootElement(); | 根据document对象获取根元素对象 |
Element addElement(“根节点名称”); | 添加根节点 |
String getName(); | 获取节点名称 |
String getText(); | 获取节点中的内容 |
String setText(String str); | 设置节点内容 |
Element element(String 子节点名称); | 根据子节点名称获取匹配的第一个子节点 |
List elements() | 获取所有的子节点对象 |
String attributeValue(String 属性名称); | 获取节点的属性值 |
String elementText(String 子节点名称); | 获取子节点的名称 |
Element addElement(String 子节点名称); | 添加子节点 |
void addAttribute(String name,String value); | 给元素添加属性 |
String attributeValue(Stirng key) | 根据元素中的属性名称获取属性值 |
XPATH解析XML
路径表达式:
/ : 从根节点开始查找
// : 从发起查找的节点位置 查找后代节点
. : 查找当前节点
… : 查找父节点
@ : 选择属性. *
属性使用方式:
[@属性名=‘值’]
[@属性名>‘值’]
[@属性名<‘值’]
[@属性名!=‘值’]
例: //book[@id=‘1’]//name
查找节点属性id =1的book中的name节点
使用步骤
方法1.
根据路径表达式, 查找匹配的单个节点
Element e = selectSingleNode(“路径表达式”);
方法2.
List es = selectNodes(“路径表达式”)
java生成xml
手动生成
1,通过文档帮助器(DocumentHelper),创建一个文档对象
2,给文档添加一个子节点(根节点)
3,通过根节点,丰富子字节点
4,创建文件输出流
5将文件输出流转换为xwl输出流
6 写出文档对象
7依次关闭资源
XStream 自动生成
1,创建Xstream对象
2,修改类生成的节点名称,默认为类的全类名
alias(“节点名称”,类名.class)
3, 传入对象生产xml字符串String toXML(Object o);
JSON
js对象简谱,是一种轻量级的数据交换格式
json格式
对象, 由一个大括号表示.:
{
game:{
name:“王者荣耀”;
company:“腾讯”
}
}
括号中 描述对象的属性 . 通过键值对来描述对象的属性
键与值之间使用冒号连接, 多个键值对之间使用逗号分隔.
键值对的键 应使用引号引住
数组由中括号表示:
[元素1,元素2]
GSON 谷歌json转换java工具
java->json
1.创建GSON对象
Gson gson = new Gson();
2,将对象转化为json:
String json = gson.toJson(Object o);
json->java
Object gson.fromJson(json, Object.class);
json中数组部分会转化为ArrayList类型
fastjson 阿里巴巴解析json
java->json
String JSON.toJSONString(Object obj)
json->java
Object JSON.parseObject(JSON字符串, 类型.class);
数组类型:
List<类型> list=JSON.parseArray(JSON字符串,类型.class);