初学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 + "本书遍历结束-----");
}
}
}