一、xml 部分
1.xml 简介
XML是Extensible Markup Language的缩写,即可扩展标记语言。它是一种具有平台无关性,自我描述性,用来创建的标记的标记语言。
xml 的应用途径一般有三种:
- 网络数据传输
- 数据存储
- 配置文件(重点)
2.xml 语法格式
1) XML文档声明
<?xml version="1.0" encoding="UTF-8"?>
2)标记 ( 元素 / 标签 / 节点)
XML文档,由一个个的标记组成.
语法:
开始标记(开放标记): <标记名称>
结束标记(闭合标记): </标记名称> 标记名称:
自定义名称,必须遵循以下命名规则:
1.名称可以含字母、数字以及其他的字符
2.名称不能以数字或者标点符号开始
3.名称不能以字符 “xml”(或者 XML、Xml)开始
4.名称不能包含空格,不能包含冒号(:)
5.名称区分大小写 标记内容: 开始标记与结束标记之间 ,是标记的内容. 例如 ,我们通过标记, 描述一个人名:
张三
3) 一个XML文档中, 必须有且且仅允许有一个根标记.
正例:
<names>
<name>张三</name>
<name>李四</name>
</names>
反例:
<name>李四</name>
<name>麻子</name>
4)标记可以嵌套, 但是不允许交叉.
正例:
<person>
<name>李四</name>
<age>18</age>
</person>
反例:
<person>
<name>李四<age></name> 18</age>
</person>
5)标记的层级称呼 (子标记, 父标记 , 兄弟标记, 后代标记 ,祖先标记)
例如:
<persons>
<person>
<name>李四</name>
<length>180cm</length>
</person>
<person>
<name>李四</name>
<length>200cm</length>
</person>
</persons>
name是person的子标记.也是person的后代标记
name是persons的后代标记.
name是length的兄弟标记.
person是name的父标记.
persons是name的祖先标记.
6) 标记名称 允许重复
7)标记除了开始和结束 , 还有属性.
标记中的属性, 在标记开始时 描述, 由属性名和属性值 组成. 格式:在开始标记中, 描述属性. 可以包含0-n个属性, 每一个属性是一个键值对! 属性名不允许重复 , 键与值之间使用等号连接, 多个属性之间使用空格分割. 属性值 必须被引号引住.
案例:
<persons>
<person id="10001" groupid="1">
<name>李四</name>
<age>18</age>
</person>
<person id="10002" groupid="1">
<name>李四</name>
<age>20</age>
</person>
</persons>
3.xml 解析
所需jar包:
代码:
public class Demo1 {
/**
* xml解析
*/
public static void main(String[] args) throws IOException, DocumentException {
//获取输入流 D:\data\IDEA\project_space\kkb\kkb-homework-05\src\Demo1.xml
FileInputStream in=new FileInputStream("src\\Demo1.xml");
//创建xml读取对象
SAXReader sr=new SAXReader();
//读取并得到文档对象
Document doc = sr.read(in);
//通过文档获取根元素
Element rootElement = doc.getRootElement();
//解析元素得到根元素
System.out.println(rootElement.getName());//books
//获取book元素
Element book = rootElement.element("book");
//获取为name标签的元素
Element name = book.element("name");
//获取元素内容
System.out.println(name.getText());//金苹果
//循环遍历
//获取根元素的所有子元素
List<Element> elements = rootElement.elements();
for (int i = 0; i <2 ; i++) {
Element element = elements.get(i);
System.out.println(element.attributeValue("id"));
System.out.println(element.elementText("name"));
System.out.println(element.elementText("info"));
}
in.close();
}
}
解析文件后控制台打印内容:
xml中文件内容:
<?xml version="1.0" encoding="UTF-8" ?>
<books>
<book id="1001">
<name>金苹果</name>
<info>锄禾日当午</info>
</book>
<book id="1002">
<name>银苹果</name>
<info>汗滴禾下土</info>
</book>
</books>
3.xml 使用XPATH快速解析
路径表达式:
通过路径快速的查找一个或一组元素 路径表达式:
- / : 从根节点开始查找
- // : 从发起查找的节点位置 查找后代节点 ***
- . : 查找当前节点
- … : 查找父节点
- @ : 选择属性. *
属性使用方式:
[@属性名=‘值’]
[@属性名>‘值’]
[@属性名<‘值’]
[@属性名!=‘值’]
上节中可以使用xpath方式获取xml内容:
/**
* xml解析
*/
public static void main(String[] args) throws IOException, DocumentException {
//获取输入流 D:\data\IDEA\project_space\kkb\kkb-homework-05\src\Demo1.xml
FileInputStream in=new FileInputStream("src\\Demo1.xml");
//创建xml读取对象
SAXReader sr=new SAXReader();
//读取并得到文档对象
Document doc = sr.read(in);
Node node = doc.selectSingleNode("//name");//金苹果
System.out.println(node.getText());
in.close();
}
二、 json部分
1)简介:
- JSON,全称是 JavaScript Object Notation,即 JavaScript对象标记法。
- JSON是一种轻量级(Light-Meight)、基于文本的(Text-Based)、可读的(Human-Readable)格式。
- JSON 的名称中虽然带有JavaScript,但这是指其语法规则是参考JavaScript对象的,而不是指只能用于JavaScript 语言。
- JSON无论对于人,还是对于机器来说,都是十分便于阅读和书写的,而且相比 XML(另一种常见的数据交换格式),文件更小,因此迅速成为网络上十分流行的交换格式。
- 因为JSON本身就是参考JavaScript 对象的规则定义的,其语法与JavaScript定义对象的语法几乎完全相同。
2)语法规则
- 数组(Array)用方括号(“[]”)表示。
- 对象(0bject)用大括号(“{}”)表示。
- 名称/值对(name/value)组合成数组和对象。
- 名称(name)置于双引号中,值(value)有字符串、数值、布尔值、null、对象和数组。
- 并列的数据之间用逗号(“,”)分隔
3) 使用Gson和FastJSON解析
需要jar包
- 使用Gson解析
代码示例:
对象转JSON格式:
public class Demo1 {
/**
* json解析--1.使用JSON解析对象
* @param args
*/
public static void main(String[] args) {
//1.创建Gson对象
Gson gson=new Gson();
//对象转换成JSON格式
Book b=new Book(1,"西游记","孙悟空三打白骨精");
String s = gson.toJson(b);
System.out.println(s);
}
}
JSON转对象:
public class Demo2 {
public static void main(String[] args) {
//1.创建Gson对象
Gson gson=new Gson();
//{"id":,"name":"西游记","info":"孙悟空三大白骨精"}
Book book=gson.fromJson("{\"id\":\"15\",\"name\":\"西游记\",\"info\":\"孙悟空三大白骨精\"}",Book.class);
System.out.println(book);
//需要转转的内容包含数组形式,会转换成list
//{"id":"1","name":"西游记","info":"孙悟空三大白骨精","page":["唐僧","沙和尚","猪八戒"]}
HashMap map=gson.fromJson("{\"id\":\"1\",\"name\":\"西游记\",\"info\":\"孙悟空三大白骨精\",\"page\":[\"唐僧\",\"沙和尚\",\"猪八戒\"]}", HashMap.class);
System.out.println(map);
}
}
- 使用Fast解析:
代码示例:
对象转JSON格式:
public class Demo3 {
/**
* json解析--2.使用fastJSON
* 对象转JSON格式
* @param args
*/
public static void main(String[] args) {
Book book = new Book(2, "水浒传", "108好汉");
String s = JSON.toJSONString(book);
System.out.println(s);
}
}
JSON转对象:
public class Demo4 {
/**
* json解析--2.使用fastJSON
* JSON格式转对象
* @param args
*/
public static void main(String[] args) {
//{"id":"1","name":"西游记","info":"孙悟空三大白骨精"}
Book book = JSON.parseObject("{\"id\":\"1\",\"name\":\"西游记\",\"info\":\"孙悟空三大白骨精\"}",Book.class);
System.out.println(book);
//JSON格式转数组
//["张三","李四","王五"]
List<String> strings = JSON.parseArray("[\"张三\",\"李四\",\"王五\"]", String.class);
System.out.println(strings.get(0));
}
}
滴滴滴滴滴滴滴滴滴~~~~~~