您的位置:首页 > 其它

dom4j使用方法总结

2013-10-11 11:26 162 查看
刚刚抽空研究了一下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<list.size();i++){
Element e = (Element) list.get(i);
System.out.println("name:"+e.getName());
System.out.println("text"+e.getText());
}*/
}


下面是我写的一个完整的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<list.size();i++){ Element e = (Element) list.get(i); System.out.println("name:"+e.getName()); System.out.println("text"+e.getText()); }*/ }

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{ } }

private static void createXML() {
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");

write(doc);
}

private static void write(Document doc) {
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();
}
}
}

}


以上代码没有写注释,相信你嫩理解!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: