老李!细说DOM4j解析XML-java

最近,小白在复习解析XML发现基本分为两类SAX和DOM,其中DOM有分为DOM,JDOM,DOM4j
经过一些列的查询 比较 最终发现DOM4j才是WEB开发最常用的一种.
那咱们就随便列举几个特点就开始说吧!
1.基于树形结构 (这点就不用说了好像DOM都是树形)
2.由于DOM4j使用迭代器进行数据读取所以它的解析速度快 效率更高(在WEB框架中较多哦)
3.DOM4j和SAX都适合大文件,经过他们视频中测验之后 发现DOM4j才是王道啊 哈哈哈
对于大文件 是10M+的文本文件 。
差不多就这些了上干货吧

public class Person {

	private String personid;
	private String name;
	private String address;
	private String tel;
	private String fax;
	private String email;
	public String getPersonid() {
		return personid;
	}
	public void setPersonid(String personid) {
		this.personid = personid;
	}
	public String getName() {
		return name;
	}
	@Override
	public String toString() {
		return "Person [personid=" + personid + ", name=" + name + ", address=" + address + ", tel=" + tel + ", fax="
				+ fax + ", email=" + email + "]";
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	public String getFax() {
		return fax;
	}
	public void setFax(String fax) {
		this.fax = fax;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
}

以上是一个Person类相信大家没什么问题
下面就是咱们的XML文件了

<?xml version="1.0" encoding="UTF-8"?>
<people>
<person personid="E01">
<name>TonyBlair</name>
<address>10 Downing street,JJX,UK</address>
<tel> (061)98765</tel>
<fax>(061) 98765</fax>
<email>blaireverywhere.com</email>
</person>
<person personid="E02">
<name>Bill</name>
<address>20 Downing street, NewYork,UK</address>
<tel> (061)65487</tel>
<fax>(061)91238</fax>
<email>where.com</email> 
</person></people>

测试方法如下
具体我就在代码逐行介绍了

public void dom4jParseXML() throws DocumentException {
		//这行不要问我为啥 因为我也不会 背下来!(创建解析器对象)
		SAXReader reader = new SAXReader();
		//下面把xml文件转成输入流 
		InputStream is = Thread.currentThread().getContextClassLoader().
				getResourceAsStream("com/jjj/person.xml");
		//用输入流生成一个DOM4j的Document
		//这里是把整个文档加载到内存
		org.dom4j.Document doc = reader.read(is);
		//这里获取到的结点是people
		org.dom4j.Element rootElement = doc.getRootElement();
		//这里利用迭代器获取person结点 这里获取到了是两个 所以下面会循环两次来生成两个person对象
		Iterator<org.dom4j.Element>iterator = rootElement.elementIterator();
		//声明一个数组来存储 pass
		ArrayList<Person> persons = new ArrayList<>();
		Person p = null;
		//循环在这里
		while(iterator.hasNext()) {
			p = new Person();
			//从迭代器中获取person元素
			org.dom4j.Element e = iterator.next();
			//赋值
			p.setPersonid(e.attributeValue("personid"));
			//这里生成的迭代器就是存储person的各种属性了name,address...
			Iterator<org.dom4j.Element> iterator1 = e.elementIterator();
			while(iterator1.hasNext()) {
			//获取一个元素结点
				org.dom4j.Element next = iterator1.next();
			//获取属性名字赋值
				String tag = next.getName();
				if("name".equals(tag)) {
					p.setName(next.getText());//得到元素的值
				}else if("address".equals(tag)) {
					p.setAddress(next.getText());
				}else if("tel".equals(tag)) {
					p.setTel(next.getText());
				}
				else if("fax".equals(tag)) {
					p.setFax(next.getText());
				}
				else if("email".equals(tag)) {
					p.setEmail(next.getText());
				}
			}
			persons.add(p);
		}

写到这里也就差不多了 如果你想运行需要jar包,评论区找我要就行,看见了就会回。
以上可能有错误或者问题请大佬指出。
谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值