dom4j使用方法总结

刚刚抽空研究了一下dom4j的用法,在这里总结一下。至于dom4j是干嘛的我就不用说了吧。

一、jar包

我用的jar包是在开源中国上下载的最新的,我把它放在云盘了,连接是dom4j-2.0.0-ALPHA-2.jar,另外如果要用到xpath的话还要另外一个包jaxen-1.1.6.jar。当然这两个包是我在网上搜的最新的,不过等你用时是不是最新的我就不敢保证了。


二、dom4j创建xml文件

创建xml文件其实是一个单调的过程,数据量大时可以用循环解决。

用到的类:org.dom4j.Documen、 org.dom4j.DocumentHelper、 org.dom4j.Element。至于这些类的用处,估计你一眼就能看出。

用到的方法:

addElement();添加节点

addAttribute();添加属性

addText();添加节点值

addComment();添加注释

下面是一段代码

		Document doc = DocumentHelper.createDocument();
		doc.addComment("这只是个测试");
		Element root = doc.addElement("root");
		root.addElement("book").addAttribute("is_read", "yes").addElement("name").addText("Think in Java");
		Element book = root.addElement("book").addAttribute("is_read", "no").addComment("good book");
		book.addElement("name").addText("C编程思想");
		book.addElement("prise").addText("¥65.3");
当然,现在创建的xml文件只是在内存中,还要写到本地文件中,请看下面一段代码

		OutputFormat format = OutputFormat.createCompactFormat();//这里定义了文件格式化类型,这个是紧凑型的
		format.setEncoding("GBK");
		XMLWriter writer = null;
		try{
			writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("./file/boos.xml")), format);
			writer.write(doc);
			writer.flush();
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			try {
				writer.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}


二、遍历xml文件

遍历文件有三种,分别是枚举、递归和visitor。我这里选用了第三种,这个需要继承一个org.dom4j.VisitorSupport类,并且并且重写public void visit(Element element)和public void visit(Attribute attribute)中的一个。下面有这段程序,我用了匿名内部类。

private static void read() {
		SAXReader reader = new SAXReader();
		Document doc = null;
		try{
			doc = reader.read(new FileInputStream("./file/boos.xml"));
			doc.accept(new VisitorSupport(){
			
				public void visit(Element element){
					System.out.println(element.getName());
					System.out.println(element.getText());
				}
			});
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			
		}
	}
这里我只是简单的打印了一下,具体要什么操作随便就行。


三、查找节点

这里用到了xpath,如果不知道xpath语法去网上搜一下,我敢肯定这是世界上最简单的语法。查找节点可以有两种情况,要么是一个list<...extend Node>,要么是一个Node值。获得Node之后可以强转成Element,然后的操作就很简单了。当然如果你要修改了某个节点必须在写回文件才能改变,要不就仅仅是在内存中修改了。具体例子请看下面的代码

private static void xpathUse() {
		SAXReader reader = new SAXReader();
		Document doc = null;
		try{
			doc = reader.read(new FileInputStream("./file/boos.xml"));
		}catch(Exception e){
			e.printStackTrace();
		}
		 Element e = (Element) doc.selectSingleNode("/root/book[1]");
		 System.out.println(e.getName());
		 e.addElement("prise").addText("¥23");
		 write(doc);
		/*for(int i=0;i

下面是我写的一个完整的demo,仅供参考


package test.demo;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.VisitorSupport;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Demo {

	public static void main(String[] args) {

		//createXML();
		//read();
		
		xpathUse();
		
	}

	private static void xpathUse() {
		SAXReader reader = new SAXReader();
		Document doc = null;
		try{
			doc = reader.read(new FileInputStream("./file/boos.xml"));
		}catch(Exception e){
			e.printStackTrace();
		}
		 Element e = (Element) doc.selectSingleNode("/root/book[1]");
		 System.out.println(e.getName());
		 e.addElement("prise").addText("¥23");
		 write(doc);
		/*for(int i=0;i

以上代码没有写注释,相信你嫩理解!



你可能感兴趣的:(个人日记,dom4j)