DOM4j解析XML

初学DOM4j解析XML,学习过程中仍存在许多问题,在网上找了一些资料自己试着写了一下,不在叙述XML及DOM4j相关知识
1.建立一个XML,如下所示

<?xml version="1.0"?>
<bookstore>
<book id="1">
<name>HELLO</name>
<author>ZHANGSAN</author>
<year>2017</year>
<price>100.00</price>
</book>
<book id="1">
<name>WORLD</name>
<author>LISI</author>
<year>2016</year>
<price>111.00</price>
</book>
<book id="3">
<name>DOM</name>
<author>WANGWU</author>
<year>2016</year>
<price>121.00</price>
</book>
<book id="4">
<name>XML</name>
<author>ZHAOLIU</author>
<year>2015</year>
<price>110.00</price>
</book>
</bookstore>

2.在eclipse中用Java代码去建立这个XML,代码如下所示

public static void create() throws IOException {
		Document document = DocumentHelper.createDocument();
		Element root = document.addElement("bookstore");//根节点
		
		Element book = root.addElement("book").addAttribute("id","1");
		book.addElement("name").addText("HELLO");
		book.addElement("author").addText("ZHANGSAN");
		book.addElement("year").addText("2017");
		book.addElement("price").addText("100.00");
		
		Element book01 = root.addElement("book").addAttribute("id", "1");
		book01.addElement("name").addText("WORLD");
		book01.addElement("author").addText("LISI");
		book01.addElement("year").addText("2016");
		book01.addElement("price").addText("111.00");
		
		Element book03 = root.addElement("book").addAttribute("id", "3");
		book03.addElement("name").addText("DOM");
		book03.addElement("author").addText("WANGWU");
		book03.addElement("year").addText("2016");
		book03.addElement("price").addText("121.00");
		
		Element book04 = root.addElement("book").addAttribute("id", "4");
		book04.addElement("name").addText("XML");
		book04.addElement("author").addText("ZHAOLIU");
		book04.addElement("year").addText("2015");
		book04.addElement("price").addText("110.00");
		
		//写入到文件中
		writer(root);
	}
	
	public static void writer(Element root) throws IOException {
		//Element root = document.getRootElement();
		// 排版缩进的格式  
		OutputFormat format = OutputFormat.createPrettyPrint();
		
		 // 设置编码
		format.setEncoding("UTF-8");
		
		// 创建XMLWriter对象,指定了写出文件及编码格式
		XMLWriter xmlwriter = new XMLWriter(new OutputStreamWriter(
				new FileOutputStream(new File("book01.xml")),"UTF-8"),format);
		xmlwriter.write(root);
		xmlwriter.flush();
	}

3.接下来便是对这个XML进行解析

@SuppressWarnings({ "rawtypes", "unchecked" })
	public static void read() throws DocumentException {
		SAXReader saxreader = new SAXReader();
		Document document = saxreader.read(new File("book01.xml"));
		Element root = document.getRootElement();
		Iterator iter01 = root.elementIterator();
		int num = 0;
		while(iter01.hasNext()) {
			num++;
			System.out.println("-----开始遍历第" + num + "本书-----");
			Element book = (Element)iter01.next();
			List<Attribute> list = book.attributes();
			for(Attribute l : list) {
				System.out.println("属性名:" + l.getName() + "***属性值:" + l.getStringValue());
				
			}
			
			Iterator iter02 = book.elementIterator();
			while(iter02.hasNext()) {
				Element bb = (Element)iter02.next();
				System.out.println("节点名为:" + bb.getName() + "***节点值为:" + bb.getStringValue());
			}
			System.out.println("-----第" + num + "本书遍历结束-----");
			
		}
		
	}

运行结果如下

-----开始遍历第1本书-----
属性名:id***属性值:1
节点名为:name***节点值为:HELLO
节点名为:author***节点值为:ZHANGSAN
节点名为:year***节点值为:2017
节点名为:price***节点值为:100.00
-----1本书遍历结束-----
-----开始遍历第2本书-----
属性名:id***属性值:1
节点名为:name***节点值为:WORLD
节点名为:author***节点值为:LISI
节点名为:year***节点值为:2016
节点名为:price***节点值为:111.00
-----2本书遍历结束-----
-----开始遍历第3本书-----
属性名:id***属性值:3
节点名为:name***节点值为:DOM
节点名为:author***节点值为:WANGWU
节点名为:year***节点值为:2016
节点名为:price***节点值为:121.00
-----3本书遍历结束-----
-----开始遍历第4本书-----
属性名:id***属性值:4
节点名为:name***节点值为:XML
节点名为:author***节点值为:ZHAOLIU
节点名为:year***节点值为:2015
节点名为:price***节点值为:110.00
-----4本书遍历结束-----

最后附上完整代码

package com.zhang.dmtest.domtest;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class DOMTest09 {

	public static void main(String[] args) throws IOException, DocumentException {
		// TODO Auto-generated method stub

		create();
		read();
	}
	
	public static void create() throws IOException {
		Document document = DocumentHelper.createDocument();
		Element root = document.addElement("bookstore");
		
		Element book = root.addElement("book").addAttribute("id","1");
		book.addElement("name").addText("HELLO");
		book.addElement("author").addText("ZHANGSAN");
		book.addElement("year").addText("2017");
		book.addElement("price").addText("100.00");
		
		Element book01 = root.addElement("book").addAttribute("id", "1");
		book01.addElement("name").addText("WORLD");
		book01.addElement("author").addText("LISI");
		book01.addElement("year").addText("2016");
		book01.addElement("price").addText("111.00");
		
		Element book03 = root.addElement("book").addAttribute("id", "3");
		book03.addElement("name").addText("DOM");
		book03.addElement("author").addText("WANGWU");
		book03.addElement("year").addText("2016");
		book03.addElement("price").addText("121.00");
		
		Element book04 = root.addElement("book").addAttribute("id", "4");
		book04.addElement("name").addText("XML");
		book04.addElement("author").addText("ZHAOLIU");
		book04.addElement("year").addText("2015");
		book04.addElement("price").addText("110.00");
		
		//写入到文件中
		writer(root);
	}
	
	public static void writer(Element root) throws IOException {
		//Element root = document.getRootElement();
		// 排版缩进的格式  
		OutputFormat format = OutputFormat.createPrettyPrint();
		
		 // 设置编码
		format.setEncoding("UTF-8");
		
		// 创建XMLWriter对象,指定了写出文件及编码格式
		XMLWriter xmlwriter = new XMLWriter(new OutputStreamWriter(
				new FileOutputStream(new File("book01.xml")),"UTF-8"),format);
		xmlwriter.write(root);
		xmlwriter.flush();
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static void read() throws DocumentException {
		SAXReader saxreader = new SAXReader();
		Document document = saxreader.read(new File("book01.xml"));
		Element root = document.getRootElement();
		Iterator iter01 = root.elementIterator();
		int num = 0;
		while(iter01.hasNext()) {
			num++;
			System.out.println("-----开始遍历第" + num + "本书-----");
			Element book = (Element)iter01.next();
			List<Attribute> list = book.attributes();
			for(Attribute l : list) {
				System.out.println("属性名:" + l.getName() + "***属性值:" + l.getStringValue());
				
			}
			
			Iterator iter02 = book.elementIterator();
			while(iter02.hasNext()) {
				Element bb = (Element)iter02.next();
				System.out.println("节点名为:" + bb.getName() + "***节点值为:" + bb.getStringValue());
			}
			System.out.println("-----第" + num + "本书遍历结束-----");
			
		}
		
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值