1. XML

1.1 XML简介

可标记语言(extensible Markup Language)

特性:

  1. XML具有平台无关性,是一门独立的语言
  2. XML具有自我描述性

XML功能:

  1. 网络传输文件
  2. 数据存储
  3. 配置文件

XML文件

  1. .XML文件时保存XNL数据的一种方式
  2. XML数据也可以以其他方式存在(如再内存中构建XML数据)
  3. XML语言不等同于XML文件

1.2 XML文档声明

<?xml version="1.0" encoding="UTF-8"?>

1.3 标记(元素/标签/节点)

由一个个标记组成

语法:

开始标记 <标记名称>

结束标记 </标记名称>

标记命名规则:

  1. 名称可以含字母、数字以及其他的字符
  2. 数字特殊符号不能做开头
  3. 不能以xml开始
  4. 名称不能有空格,冒号
  5. 名称区分大小写

1.3.1 一个XML文档中,必须有且仅有一个根标记

例如:

<names><name>张三</name><name>李四</name>
</names>

标记可以重复,可以嵌套,但不能交叉

1.3.2 标记的层级称呼(子标记,父标记,兄弟标记,后代标记,祖先标记)

<persons><person><name>张三</name><age>18</age></person>
</persons>

1.3.3 标记的属性

标记中的属性在标记开始时描述,由属性名和属性值组成

格式:

在开始标记中,描述属性

可以包含0-n个属性,每一个属性是一个键值对

属性名不允许重复,键与值之间使用等号连接,多个属性之间使用空格分隔

属性值必须用引号引住

注释:

<!--xxx-->

1.3.4 CDATA

CDATA 是不应该由 XML 解析器解析的文本数据。

像 “<” 和 “&” 字符在 XML 元素中都是非法的。"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。"&" 会产生错误,因为解析器会把该字符解释为字符实体的开始。

某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。

CDATA 部分中的所有内容都会被解析器忽略。

CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束
例如:
<name><![CDATA[ 哈<a></a>哈 ]]>
</name>

1.4 DOM4J解析XML

步骤:

  1. 引入jar文件 dom4j.jar
  2. 创建一个指向XML文件的输入流
FileInputStream fis = new FileInputStream("xml文件的地址");
  1. 创建一个XML读取工具对象
SAXReader sr = new SAXReader();
  1. 使用读取工具对象,读取XML文档的输入流,并得到文档对象
Document doc = sr.read(fis);
  1. 通过文档对象,获取XML文档中的根元素对象
Element root = doc.getRootElement();

1.4.1 文档对象 Document

指的是加载到内存的整个XML文档

常用方法:

  1. 通过文档对象,获取XML文档中的根元素对象
Element root = doc.getRootElement();
  1. 添加根节点
Element root = doc.addElement("根节点名称")

1.4.2 元素对象 Element

指的是XML文档中的单个节点

常用方法:

  1. 获取节点名称
String getName();
  1. 获取节点内容
String getText();
  1. 设置节点内容
String setText();
  1. 根据子节点名称,获取匹配名称的第一个子节点对象
Element element(String 子节点名称)
  1. 获取所有子节点对象
List<Element> elements();
  1. 获取节点的属性值
String attributeValue(String 属性名称)
  1. 获取子节点的内容
String elementText(String 子节点名称)
  1. 添加子节点
Element addElement(String 子节点名称)
  1. 添加属性
void addAttribute(String 属性名, String 属性值);

例如:

FileInputStream fis = new FileInputStream("G:\\Programming\\Java\\Kaikela\\JAVAEE\\04\\0407\\0407\\src\\demo.xml");
SAXReader sr = new SAXReader();
Document doc = sr.read(fis);
Element root = doc.getRootElement();
System.out.println(root.getName());
/*Element book = root.element("book");
Element name = book.element("name");
System.out.println(name.getText());*/
List<Element> es = root.elements();
for (Element e:es) {System.out.println(e.elementText("name"));System.out.println(e.attributeValue("id"));
}

1.5 DOM4J - XPATH 解析XML

1.5.1 路径表达式

通过路径快速地查找一个或一组元素

  1. / : 从根节点开始查找
  2. // : 从发起查找的节点位置 查找后代节点
  3. . : 查找当前节点
  4. … : 查找父节点
  5. @ : 选择属性,
属性使用方式:
[@属性名='值']
[@属性名>'值']
[@属性名<'值']
[@属性名!='值']

books: 路径:/book/name 或 //name
//book[id=‘1’]//name

1.5.2 使用步骤

通过Node类的两个方法,来完成查找:

(Node 是 Document 与 Element 的父接口)

方法1:

根据路径表达式,查找匹配的单个节点
Element e = selectSingleNode("路径表达式");

方法2:

List<Element> es = selectionNodes("路径表达式");

1.6 Java生成XML

//通过文档帮助器创建文档对象
Document doc = (Document) DocumentHelper.createDocument();
//给文档对象添加一个根节点(第一个节点)
Element books = doc.addElement("books");
//通过根节点,丰富子节点
for(int i=0; i<10; i++){Element book = books.addElement("book");Element name = book.addElement("name");name.setText("hello world");Element info = book.addElement("info");info.setText("a java tutorial textbook");book.addAttribute("id", 100+i+"");
}
FileOutputStream fos = new FileOutputStream("G:\\Programming\\Java\\Kaikela\\JAVAEE\\04\\0407\\books.xml");
XMLWriter xw = new XMLWriter(fos);
xw.write(doc);
xw.close();
System.out.println("执行完毕");

1.6.1 使用Xstream生成XML文档

Person p = new Person();
p.setAge(18);
p.setName("张三");//xstream使用
//创建xstream对象
XStream x = new XStream();
//修改某个类型生成的根节点
x.alias("person", Person.class);
//传入对象开始生成
String xml = x.toXML(p);
System.out.println(xml);

2. JSON

简介:(JavaScript Object Notation) JS对象简谱,是一种轻量级的数据交换格式

所占空间更小,解析更快

2.1 对象格式

属性间加逗号,属性名加引号,当属性值是字符串时加引号。

JSON可以包含很多层级

{"name":"金苹果","info":"ddd"
}

2.2 解析JSON

2.2.1 GJSON

  1. 创建JSON
//1.创建JSON对象
Gson g = new Gson();
//2.转换
Book b = new Book(100, "金苹果", "种植苹果");
String s = g.toJson(b);
System.out.println(s);
  1. 解析JSON

将JSON转换成对象

//1.创建JSON对象
Gson g = new Gson();//2.转换 {"id":100,"name":"金苹果","info":"种植苹果"}
Book b = g.fromJson("{\"id\":100,\"name\":\"金苹果\",\"info\":\"种植苹果\"}", Book.class);
System.out.println(b.getId());

将JSON转换成列表

JSON格式下的数组实际是ArrayList类型的

//1.创建JSON对象
Gson g = new Gson();
//2.转换 {"id":100,"name":"金苹果","info":"种植苹果", "page":["A", "B", "C"]}
HashMap data = g.fromJson("{\"id\":100,\"name\":\"金苹果\",\"info\":\"种植苹果\", \"page\":[\"A\", \"B\", \"C\"]}", HashMap.class);
System.out.println(data.get("page"));

2.2.2 FASTJSON

更适合国内开发环境

  1. 创建JSON
Book book = new Book(1002, "xxx", "aaa");
//1. 转换
String json = JSON.toJSONString(book);
System.out.println(json);
  1. 将JSON转换成列表

直接转换成类

Book book = JSON.parseObject("{\"id\":1002,\"info\":\"aaa\",\"name\":\"xxx\"}", Book.class);
System.out.println(book.getId());

将JSON转换成键值对存在哈希表中

HashMap data = JSON.parseObject("{\"id\":1002,\"info\":\"aaa\",\"name\":\"xxx\", \"page\":[\"A\", \"B\", \"C\"]}", HashMap.class);System.out.println(data.get("page"));List<String> list = (List)data.get("page");
System.out.println(list.get(1));
  1. 从API中获取信息
StringBuilder json = new StringBuilder();
String location = "Bristol";
//1.    获取到JSON资源的输入流
URL url = new URL("http://api.weatherstack.com/current?access_key=932be2be5274beceff8781265ced7233&query="+ location);
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is));String inputLine = null;
while ( (inputLine = in.readLine()) != null) {json.append(inputLine);
}
in.close();//解析JSON
HashMap data = JSON.parseObject(json.toString(), HashMap.class);
HashMap wDescription = JSON.parseObject(data.get("current").toString(), HashMap.class);
List<String> list = (List)wDescription.get("weather_descriptions");
System.out.println(list.get(0));

XML与JSON的生成与解析相关推荐

  1. Xml 格式数据的生成和解析

    相关阅读 XML约束 Xml 格式数据的生成和解析 XML解析器 什么是XML XML全称为Extensible Markup Language, 意思是可扩展的标记语言,它是 SGML(标准通用标记 ...

  2. C#对XML、JSON等格式的解析

    C#对XML.JSON等格式的解析 一.C#对XML格式数据的解析 1.用XMLDocument来解析 XmlDocument xmlDocument = new XmlDocument();xmlD ...

  3. XML和JSON 已经常用的解析工具

    Json XML 大数据时代,我们需要从网络中获取海量的新鲜的各种信息,就不免要跟着两个家伙打交道,这是两种结构化的数据交换格式.一般来讲,我们会从网络获取XML或者Json格式的数据,这些数据有着特 ...

  4. C#合成解析XML与JSON

      http://www.xuanyusong.com/archives/1901  XML与JSON在开发中非常重要, 其实核心就是处理字符串.一个是XML的字符串一个是JSON的字符串,尤其是在处 ...

  5. Qt之JSON生成与解析

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...

  6. 实测:xml与json速度约差4倍

    xml与json在javascript中解析并使用,速度大约相差4倍.(在IE中测试的结果). 其中主要不在于eval,与xml parse的时间差别,主要在于属性访问上的差别: xml中使用这样的方 ...

  7. c#解析json字符串数组_C#解析JSON字符串总结

    JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...

  8. golang xml和json的解析与生成

    golang中解析xml时我们通常会创建与之对应的结构体,一层层嵌套,完成复杂的xml解析. package main;import ("encoding/xml""fm ...

  9. Android Json生成及解析实例

    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...

最新文章

  1. hbase 0.96 java api_HBase(九) HBase JAVA API - 运维API
  2. js实现下拉框三级级联
  3. python stm32-STM32 上面跑Python
  4. [WinCE版凯立德]2013夏季版地图2E21J0D更新下载(9.8增加2E23J0D分省地图)
  5. 查找发布地图的 REST URL并查询相关信息
  6. 【JAVA 第三章 流程控制语句】课后习题 计算两个日期之间的天数
  7. 车辆贷款违约预测 Top1(2021科大讯飞)
  8. 拓端tecdat|新零售消费者特征的数据视野
  9. ECshop仿顺丰优选综合购物商城平台源码旗舰版+团购+触屏版+微信支付
  10. 通信原理学习笔记5-1:数字调制——脉冲成形滤波器选择(码间串扰、Nyquist准则、升余弦滚降滤波器、眼图)
  11. 重磅:使用UOS微信桌面版协议登录,wechaty免费版web协议重放荣光
  12. ICMP增强型snort规则
  13. 百度离线地图瓦片下载器
  14. 头歌:《C语言程序设计编程实践任务》教学团队:祁文青:选择结构程序设计
  15. 3D游戏编程与设计作业六
  16. 爱创课堂每日一题第二十九天- ES6的了解?
  17. QT使用串口与RS485设备通讯
  18. 3 年 CRUD 从 8K 涨到 28K,谁知道这4个月我到底经历了什么?
  19. 2021自动驾驶领域最具商业合作价值企业盘点
  20. 贪心算法——最小生成树

热门文章

  1. VMWare 14虚拟机下载和安装说明兼容WIN10
  2. php link rel= icon,link
  3. python做统计分析_用Python做数据分析,Numpy,Pandas,matp
  4. 提高孩子睡眠质量 学业事半功倍
  5. 线性代数【16】再从向量空间理解行列式和重要的右手原则
  6. 如何使用hardhat进行合约uups模式升级
  7. 增值税发票扫描识别|发票扫描识别|发票识别
  8. Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理
  9. 网易易盾滑块逆向分析 js 滑动轨迹生成_1
  10. Java码农进阶之路~数组的深进浅出