Java解析XML(四)——通过DOM4J方式解析XML

            使用DOM4J的方式解析XML同样需要第三方jar包,如果你对前面三种解析方法都有所了解,那么用过DOM4J方式来解析xml就不会陌生了,话不多说直接上代码


            XML文件

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
	<book id="1">
		<name>冰与火之歌</name>
		<author>乔治马丁</author>
		<year>2014</year>
		<price>89</price>
	</book>
	<book id="2">
		<name>安徒生童话</name>
		<year>2004</year>
		<price>77</price>
		<language>English</language>
	</book>
</bookstore>

            代码:

package lowp.test.java;

import java.io.File;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


/**
 * 
 * @author Lowp
 *
 */
public class DOM4JTest {
	public static void main(String[] args) {
		//1.创建一个SAXReader对象
		SAXReader reader = new SAXReader();
		
		try {
			//2.通过reader的reader方法加载xml文件,并得到一个Dcument对象
			Document document = reader.read(new File("src/res/books.xml"));
			//3.通过document对象xml的根节点
			Element bookstore = document.getRootElement();
			//4.通过elementIterator方法获取一个迭代器
			Iterator it =  bookstore.elementIterator();
			//5.遍历迭代器,获取bookstore节点下的任意一个子节点
			while (it.hasNext()) {
				System.out.println("===开始遍历第===");
				//通过next方法获取迭代器中节点,并强制转换成Element类型
				Element book = (Element) it.next();
				//获取book的属性集合
				List<Attribute> bookAtts = book.attributes();
				//遍历属性
				for (Attribute attr : bookAtts) {
					System.out.println("属性名:" + attr.getName() + "--->属性值:" + attr.getValue());
				}
				
				//通过elementIterator方法获取一个book子节点迭代器
				Iterator itt = book.elementIterator();
				//遍历迭代器,获取book节点下的任意一个子节点
				while (itt.hasNext()) {
					//通过next方法获取迭代器中节点,并强制转换成Element类型
					Element bookChlid = (Element) itt.next();
					
					System.out.println("节点名:" + bookChlid.getName() + "--->节点值:" + bookChlid.getStringValue());
				}
				System.out.println("===结束遍历第===");
			}
			
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

           运行结果:
===开始遍历第===
属性名:id--->属性值:1
节点名:name--->节点值:冰与火之歌
节点名:author--->节点值:乔治马丁
节点名:year--->节点值:2014
节点名:price--->节点值:89
===结束遍历第===
===开始遍历第===
属性名:id--->属性值:2
节点名:name--->节点值:安徒生童话
节点名:year--->节点值:2004
节点名:price--->节点值:77
节点名:language--->节点值:English
===结束遍历第===



4种解析XML文件方式总结

基础方法:DOM(平台无关的官方解析方式)、SAX(基于事件驱动的解析方式)
扩展方法:JDOM、DOM4J(在基础的方法上扩展出的,只有在java中能够使用的解析方法)

DOM:一次性将整个xml文件加载到内存中,形成DOM树
优点:形成了树结构,直观好理解,代码更容易编写
解析过程中树结构保留在内存中,方便修改
缺点:当xml文件较大时,对内存消耗比较大,容易影响解析性能并造成内存溢出


SAX:逐条语句判断解析
优点:采用事件驱动模式,对内存消耗比较小
适用于只需要处理xml中数据时
缺点:不易编码
很难同时访问同一个xml中的多处不同数据

JDOM:仅使用具体类而不使用接口
API大量使用了Collections类

DOM4J:JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能
DOM4J使用接口和抽象基本类方法,是一个优秀的Java XML API
具有性能优异、灵活性好、功能强大和极端易使用的特点
是一个开放源代码的软件


然而,具体要使用什么方式解析XML文件,还是要根据实际情况决定!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值