Java学习笔记10

XML——可扩展标记语言

对于标记的可扩展

  1. xml具有平台无关性,是一门独立的标记语言->与语言平台无关
  2. xml具有自我描述性

为什么学习xml

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

xml文件

.xml文件是保存xml数据的一种格式
xml数据也可以以其他方式存在

语法格式

文档声明

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

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

语法:
开始标记(开放标记):<标记名称>
结束标记(闭合标记):</标记名称>

标记名称:自定义标记,必须遵循以下命名规则:

  1. 名称可以含字母、数字以及其他的字符
  2. 名称不能以数字或者标点符号开始
  3. 名称不能以字符xml或者Xml、XML开始
  4. 名称不能包含空格,不能包含冒号
  5. 名称区分大小写

标记内容:开始标记与结束标记之间,是标记的内容

一个xml文档中,必须有且只能允许有一个根标记

正例

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

反例

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

标记可以嵌套,但是不允许交叉

正例

<names>
	<name>张三</name>
	<age>12</age>
<names>

反例

<names>
	<name>张三</age>
	<age>12</name>
<names>

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

标签的属性

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

  1. 在开始标记中,描述属性
  2. 可以包含0-n个属性,每一个属性是一个键值对
  3. 属性名不允许重复,键与值之间使用等号连接,多个属性之间使用空格分隔
  4. 属性名必须被引号引住

注释

注释不能写在声明文档前
注释不能嵌套注释
格式:

  1. 注释开始:<!–
  2. 注释结束:–>

CDATA

由<![CDATA[ 开始 由 ]]> 结束
中间的代码会被解析器忽略

Java解析xml

Java中有几种xml解析方式?分别是什么?有什么样的优缺点

SAX解析

解析方式是事件驱动机制
SAX解析器,逐行取读xml文件解析,每当解析一个标签的开始 / 结束 / 内容 / 属性时,触发事件。我们可以在编写程序在这些事件发生时,进行相应的处理
优点:

  1. 分析能够立即开始,而不是等待所有数据被处理
  2. 逐行加载,节省内存,有助于解析大于系统内存的文档
  3. 有时不必要解析整个文档,它可以在某个条件得到满足时停止解析

缺点:

  1. 单向解析,无法定义文档层次,无法同时访问同一文档的不同部分数据(因为逐行解析,当解析到第n行时,第n-1行已经被释放,无法进行操作)
  2. 无法得知事件发生时的元素层级,只能自己维护节点的父子关系
  3. 只读解析方式,无法修改xml内容

DOM解析

是用与平台和语言无关的方式表示xml文档的官方w3c标准,分析该结构通常需要加载整个文档和内存中建立文档树模型,程序员可以通过操作文档树,来完成数据的获取 修改 删除等
优点:

  1. 文档在内存中被加载,允许对数据和结构做出更改
  2. 访问时双向的,可以在任何时候在树中双向解析数据

缺点:
文档全部加载在内存中,消耗资源大

JDOM解析

目的是成为Java特定文档模型,他简化与xml的交互并且比使用DOM实现更快,JDOM声明文档其目的是,使用20%的精力解决80%的java/xml问题
优点:

  1. 使用具体类而不是接口,简化了DOM的API
  2. 大量使用了Java集合类,方便Java开发人员
    缺点:
  3. 没有较好的灵活性
  4. 性能不是非常优异

DOM4J解析

他是JDOM的一种智能分支,他合并了许多超出基本xml文档表示的功能,包括集成的xpath支持、xml Scheam支持以及用于大文档或流化文档的基于事件的处理,他还提供了构建文档表示的选项,DOM4J是一个非常优秀的Java xml API,具有性能优异、功能强大和极端易用的特点,同时也是一个开放源代码的软件

通过Java生成xml

  1. 创建Xstream对象
Xstream x = new XStream();
  1. 修改类生成的节点名称
x.alias("节点名称",类名.class)
  1. 传入对象,生成XML字符串
String xml = x.toXML(对象);

DOM4J - XPATH解析xml

通过路径快速查找一个或一组元素
路径表达式:

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

像爬虫一样根据xpath找值
聚合-接口网站

Json

JavaScript Object Notation Js对象简谱,是一种轻量级的数据交换格式

对象格式

一个对象由一个大括号表示,括号中描述对象的属性与函数
可以理解为,大括号中,包含的是一个个键值对
格式:

  1. 键与值之间使用冒号连接,多个键值对之间使用逗号分隔
  2. 键值对应的键,应使用引号引住,通常Java解析时,键不使用引号会报错,而JS能正确解析
  3. 键值对的值,可以是JS中的任意类型的数据

将对象转为JSON字符串

Gson

  1. 引入JAR包
  2. String json = new Gson().toJSON(要转换的对象);

FastJson

  1. 引入JAR包
  2. String json=JSON.toJSONString(要转换的对象);

解析Json

Gson

  1. new Gson对象
  2. 通过对象调用fromJson方法,传入json
对象 = new Gson().fromJson(JSON字符串,对象类型.class)
  1. 获取对应的值
    Gson中,如果json格式字符串中键值对的值包含数组,则转化为ArrayList

FastJson

通过JSON.parseObject转为对象
通过JSON.parseArray转为list

  1. 转为对象
类型 对象名=JSON.parseObject(JSON字符串, 类型.class);
  1. 转为List
List<类型> list=JSON.parseArray(JSON字符串,类型.class);

ON.parseObject转为对象
通过JSON.parseArray转为list

  1. 转为对象
类型 对象名=JSON.parseObject(JSON字符串, 类型.class);
  1. 转为List
List<类型> list=JSON.parseArray(JSON字符串,类型.class);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值