xml和json讲解-12月2日讲课内容
XML
概述
Extensible Markup Language
可拓展标记语言,是由W3C万维网联盟指定的规范
用途:
1. 数据存储,小型数据库,存在一定的CRUD操作可行性
2. 网络端数据的传输
3. 常见配置文件【重要】
【注意】后期大部分配置文件都是XML格式,数据传输不用XML,使用JSON
XML 和 HTML 之间的差异
XML 不是 HTML 的替代。
XML 和 HTML 为不同的目的而设计:
- XML 被设计用来传输和存储数据,其焦点是数据的内容。
- HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息,而 XML 旨在传输信息。
XML 中的标签可自定义
基本语法【重点】
1. XML文件后缀名是.xml
2. XML第一行是对于当前文件的定义声明
3. XML文件中有且只有一个根标签
4. 属性值必须使用引号包含,这里推荐使用双引号
5. 标签必须正确匹配,正确开始和关闭
6. XML标签内严格区分大小写
案例代码
<!--XML声明,版本号加编码集-->
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id = "1">
<name>赵四</name>
<age>18</age>
<gender>男</gender>
</student>
<student id = "2">
<name>刘能</name>
<age>19</age>
<gender>男</gender>
</student>
<student id = "3">
<name>玉田</name>
<age>20</age>
<gender>男</gender>
</student>
</students>
XML 文件约束【了解】
- DTD
一种简单的约束方式但是存在一定的约束问题
- Schema
一种复杂XML文件约束方式非常严谨
XML 实体引用【重点】
且, 对应&
&
XML 解析【了解】
概述
XML的解析方式分为四种:
1、DOM解析;
2、SAX解析;
3、JDOM解析;
4、DOM4J解析。
其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。这里只说一下最常用并且性能最好的 [Dom4j]() 解析
DOM4J解析
特点
1、JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能。
2、它使用接口和抽象基本类方法。
3、具有性能优异、灵活性好、功能强大和极端易用的特点。
4、是一个开放源码的文件,被很多优秀的开源框架所使用
jar 包
dom4j-1.6.1.jar
核心API
// 核心类 SAXReader
class SAXReader {}
// 获取Document对象
Document read(File file);
// 获取指定节点的节点类对象
Element element();
// 获取指定节点所有的节点对象,返回的是一个list
List elements();
// 获取节点名
String getName();
// 获取节点对应的数据
String getText();
案例代码
public class Demo {
public static void main(String[] args) throws DocumentException {
// 获取SAXReader对象
SAXReader reader = new SAXReader();
// 获取对应的Document对象
Document document = reader.read(new File("./XML/src/Student.xml"));
// 获取跟节点对象
Element rootElement = document.getRootElement();
// 获取根节点对象的节点名并展示
System.out.println(rootElement.getName());
// 获取根节点下的所有子节点对应的List集合
List<Element> elements = rootElement.elements();
// 遍历获取所有的子节点
for (Element element : elements) {
// 展示子节点的节点名以及id属性所对应的值
System.out.println(element.getName() + ":" + element.attribute("id").getValue());
// 获取更深一层的子节点
List<Element> list = element.elements();
// 遍历获取所有的子节点
for (Element element1 : list) {
// 拿到子节点的节点名以及对应的数据
System.out.println(element1.getName() + ":" + element1.getText());
}
}
}
}
JSON
概述
JavaScript Object Notation
(JavaScript Object Notation,JavaScript对象表示法,读作/ˈdʒeɪsən/)是一种由道格拉斯·克罗克福特构想和设计、轻量级的数据交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯
特点
1、存储和交换文本信息的语法,类似XML
2、轻量级(小、快)
3、可读性强(容易解析)
案例代码
{
"firstName": "John",
"lastName": "Smith",
"sex": "male",
"age": 25,
"married": false,
"address":
{
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumber":
[
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "fax",
"number": "646 555-4567"
}
]
}
JSON 语法
JSON 的语法基本上可以视为 JavaScript 语法的一个子集,包括以下内容:
- 数据使用键/值对表示。建议键使用引号引起来!
- 键/值对使用 ,(逗号)分割。
- 使用大括号保存对象,每个名称后面跟着一个 ':'(冒号)
- 使用方括号保存数组,数组值使用 ,(逗号)分割。
案例代码
{
"book": [
{
"id":"01",
"language": "Java",
"edition": "third",
"author": "Herbert Schildt"
},
{
"id":"07",
"language": "C++",
"edition": "second"
"author": "E.Balagurusamy"
}]
}
JSON 支持以下两种数据结构:
- 键/值对集合: 这一数据结构由不同的编程语言支持。
- 有序的值列表: 包括数组,列表,向量或序列等等。
数据格式
JSON 值
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 对象(花括号里)
- 数组(中括号里)
- null
数字、字符串、逻辑值
案例代码
{
"name": "buffer",
age: 16,
'gender': true
}
对象
JSON 对象在花括号中书写:
对象可以包含多个键/值对
案例代码
{
"id":001,
"name":"张三",
"age":18
}
数组
案例代码
{
name : ["张三", '李四', '王五'],
age : ["1", '2', 3],
info : ['帅']
}
对象数组
- 数据使用[]包含
- 在[]都是JSON格式对象
- 每一个对象之间使用逗号隔开,同时最后一个元素不需要逗号
案例代码1
{
person1: [
{
"name": "张三"
},
{
"age": 1
},
{
"gender": true
}
],
person1: [
{
"name": "李四"
},
{
"age": 2
},
{
"gender": true
}
],
person1: [
{
"name": "翠花"
},
{
"age": 3
},
{
"gender": false
}
]
}
案例代码2
{
"person1": [
{
"name": "张三",
"age": 13,
"gender": true
}
],
"person2": [
{
"name": "李四",
"age": 15,
"gender": true
}
],
"person3": [
{
"name": "翠花",
"age": 19,
"gender": false
}
]
}
JSON数据获取
1、json对象.键名
2、json对象["键名"]
3、数组对象[下标] -》 对应数组
案例代码一
var person = {"name":"张三"};
var name = person.name;
alert(name);
案例代码二
var person = {"name":"张三"};
var name = person["name"];
alert(name);
案例代码三
var persons = {"person" : ["张三", 16, false]};
var name = persons.person[0];
alert(name);
案例代码四
var persons = {
"person": [{
"name": "张三"
}, {
"age": 16
}, {
"gender": false
}]
};
var name = persons.person[0]["name"];
var age = persons.person[1].age;
alert(name + age);
案例代码五
var person = {
"name": "玉田",
"age": 21
};
for (var key in person) {
alert(key + ":" + person[key]);
}
案例代码六
var persons = [{
"name": "老七",
"age": 47,
"gender": true
}, {
"name": "永强",
"age": 23,
"gender": true
}, {
"name": "刘英",
"age": 20,
"gender": false
}];
for (var i = 0; i < persons.length; i++) {
var person = persons[i];
for (var key in person) {
alert(key + ":" + person[key]);
}
}