Day11=xml语法+DOM4J解析XML+从url获取xml资源并解析+生成XML+JSON

XML

可扩展标记语言Extensible markup language

  1. 平台无关性,独立的标记语言
  2. 自我描述性,可以由不同语言解析
    用途:
  3. 网络数据传输
  4. 数据存储
  5. 配置文件
    存储数据:
  • .xml文件方式
  • 内存中构建xml数据

xml语法格式

  1. 自我描述 xml文档声明第一行 <?xml version="1.0" encoding="UTF-8"?>
    2 标记(元素/标签/节点)
    • xml文档由标记组成
    • 开始标记(开放标记):<name>
    • 结束标记(闭合标记):</name>
    • 命名限制 不能以数字活标点开始,不能以xml开始,区分大小写,不能含空格和冒号
    • 标记内容:开始与结束标记之间
  2. 有且仅有一个根标记 <names><name></name></names>(里面有多个name)
  3. 允许嵌套不允许交叉
  4. 层级称呼 子/父/兄弟/后代/祖先
  5. 标记的属性 标记开始时描述 <name id="" groupid="">
  6. 注释 <!-- -->

语法进阶CDATA

不应该由xml解析器解析的文本数据(比如javascript)
<![xxxxx]>

Java如何解析xml

面试题:java有几种xml解析方式?

  1. SAX解析 事件驱动机制,逐行读取xml文件解析,读到标签开始/结束/内容/属性时触发事件,编写程序在事件发生时进行相应的处理
    • 逐行加载,节省内存
    • 单项解析,无法定位文档层次,无法同时访问不同部分数据(逐行)
    • 只读,无法修改
  2. DOM解析 加载整个文档 内存中建立文档树模型,操作文档树
    • 文件直接全部加载在内存中
    • 允许对数据和结构作出修改
    • 双向解析
  3. DOM衍生的其他方式

XPATH解析

路径表达式:通过路径快速查找元素。

  • /:根开始
  • //:当前节点开始
  • .:查找当前节点
  • ..:查找父节点
  • @:选择属性
    • [@属性名=><!=‘值']
//1.	获取输入流
FileInputStream fis = new FileInputStream("");
//2.	创建xml读取对象
SAXReader sr = new SAXReader();
//3.	读取并得到文档对象
Document doc = sr.read(fis);
//4.	文档对象+xpath查找所有节点
List<Node> names = doc.selectNodes("//book[@id='100']//name");
for(int i=0;i<names.size();i++){
	System.out.println(names.get(i).getName());
	System.out.println(names.get(i).getText());
}
//只有一个,可以使用
doc.selectSingleNode();
fis.close();

从网址获取XML资源

//1. 	获取xml资源输入流
URL url = new URL("");
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
//2.	创建xml读取对象
SAXReader sr = new SAXReader();
//3.	读取对象,读取XML数据并返回文档对象
Document doc = sr.read(is);

Node node = doc.selectSingleNode("//");

DOM4J解析XML

//引入jar文件 dom4j.jar 粘贴到lib里
//project structure项目配置找lib 把sources删掉点添加,找到本项目库里的lib内容
//创建指向xml文件的输入流
FileInputStream fis = new FileInputStream("");
//创建xml读取工具对象
SAXReader sr = new SAXReader();
//读取工具对象sr读取xml文档
Document doc = sr.read(fis);
//文档对象获取根元素对象
Element root = doc.getRootElement();
//查找根所包含元素
Element book = root.element("book");
fis.close();

元素对象Element

指单个节点

  • 获取名称 getName()
  • 获取内容 getText()
  • 设置内容 setText()
  • 获取所有子节点对象 List elements()
  • 获取节点属性 attributeValue(String 属性名称)
  • 获取子节点内容 elementText(String 子节点名称)
  • 添加子节点 addElement(子节点名称)

XML生成

  1. 文档帮助器DocumentHelper创建空文档对象DocumentHelper.createDocument();
  2. 添加根节点 doc.addElement("");
  3. 添加子节点 books.addElement(""); book.addAttribute("","");
  4. 创建文件输出流,存储xml文件 new FileOutputStream("");
  5. 文件输出流转为(装饰为)xml文档输出流 new XMLWriter(fos);
  6. 写出到文档 xw.write(); xw.write(doc)
  7. 记得释放资源 xw.close();
    ctrl+alt+l格式化xml

xstream.jar包提供了一个将字符串转换为xml的工具

如果有个对象要转换为xml文件

//1.	创建xstream对象
XStream x = new 
//2.	修改某类型自动生成的根节点 (默认包名.类名)
x.alias("person",Person.class);//person对象的外层节点是person这个字符串,否则是包名.类名
//3.	传入对象,开始生成
String xml = x.toXML(p);

JSON

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

对象格式总结

  • java
class Book{
	private String name;
	private String info;
	get/set...
}
  • js
var b = new Object();
b.name = "";
b.info = "";
  • XML
<book>
	<name>xx</name>
	<info>xxx</info>
</book>
  • JSON
{
	"name":"xx",
	"info":"xx"
	"array":["xx","xx",...,{"name":"","info":""}],
}

JSON解析jar包

Gson(谷歌的)

将对象转换为JSON字符串

  1. 引入jar包
  2. String json = new Gson().toJSON(对象);
    将字符串转换为对象(字符串转对象时数组部分会转成ArrayList)
    new Gson().fromJson(json,Book.class);

FastJson(阿里的)

将对象转为字符串
JSON.toJSONString(object);
字符串转为对象
JSON.parseObject(str, xx.class);
List<String> strs = JSON.parseArray("[\"......\"]",String.class);
strs.get(1);获取下标1的数组元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值