XML


XML的解析方式


SAX解析

事件驱动机制,逐行读取XML文件进行解析,当解析到标签的开始/结束/内容/属性时,
触发事件,可以编写程序在事件触发时,执行相应操作

优点

  1. 分析可以立刻开始,不需要等待加载
  2. 逐行加载,节省内存
  3. 不必解析整个文档,在某个条件得到满足时停止解析

缺点

  1. 单向解析,解析到第n行,n-1行的内容被当作内存垃圾回收了
  2. 解析到子标签时程序员无从得知它属于哪个父标签,需要自己写代码操作
  3. 只读解析,无法修改XML文件的内容

DOM解析

将整个XML文档加载到内存中并建立XML树模型,通过树模型可以对数据进行增删改查

优点

  1. 文档在内存中加载,可以对XML文件进行修改
  2. 双向解析,任何时候在树中双向解析数据

缺点

  1. 文档全部加载在内存中,消耗资源大

JDOM解析

优点

  1. 使用具体类而不是接口,简化了DOM解析的API
  2. 大量使用Java集合类,方便Java开发人员

缺点

  1. 灵活性差,因为不是面向接口编程
  2. 性能不优异

DOM4J解析

它是JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能
包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理
它还提供了构建文档表示的选项, DOM4J是一个非常优秀的Java XML API
具有性能优异、功能强大和极端易用使用的特点
同时它也是一 个开放源代码的软件
如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML


XML的解析过程

//1、获取对应XML文档的输入流
URL url = new URL("http://apis.juhe.cn/mobile/get? phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
//2、创建一个XML读对象
SAXReader sr = new SAXReader();
//3、读取XML数据,返回文档对象
Document doc = sr.read(is);
//4、获取根节点
Element root = doc.getRootElement();
//5、解析resultcode标签下的内容
String code = root.elementText("resultcode");
if("200".equals(code)){
	//6、获取根节点下的result节点并解析内容
    Element result = root.element("result");
    String city = result.elementText("city");
    System.out.println("该手机号码的归属地为:"+city);
}

XPath的解析过程

//1、获取对应XML文档的输入流
URL url = new URL("http://apis.juhe.cn/mobile/get? phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
//2、创建一个XML读对象
SAXReader sr = new SAXReader();
//3、读取XML数据,返回文档对象
Document doc = sr.read(is);
//4、XPath解析
Node node = doc.selectSingleNode("//company");
System.out.println(node.getText());

通过路径,直接获取XML树模型某节点下的内容,返回的数据类型为Node


XML的生成过程

//1、创建Document对象
Document doc = DocumentHelper.createDocument();
//2、设置节点
Element books = doc.addElement("books");
Element book = books.addElement("book");
Element name = book.addElement("name");
name.setText("aaa");
Element info = book.addElement("info");
info.setText("bbb");
//3、创建文件输出流
FileOutputStream fos = new FileOutputStream("D://books.xml");
//4、转化为XML输出流
XMLWriter xw = new XMLWriter(fos);
//5、写出文档
xw.write(doc);
xw.close();
//1、创建XStream对象
XStream x = new XStream();
//2、设置节点的名称,默认为包名.类名
x.alias("person",Person.class);
String xml = x.toXML(p);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值