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();添加注释
下面是一段代码
当然,现在创建的xml文件只是在内存中,还要写到本地文件中,请看下面一段代码
二、遍历xml文件
遍历文件有三种,分别是枚举、递归和visitor。我这里选用了第三种,这个需要继承一个org.dom4j.VisitorSupport类,并且并且重写public void visit(Element element)和public void visit(Attribute attribute)中的一个。下面有这段程序,我用了匿名内部类。
这里我只是简单的打印了一下,具体要什么操作随便就行。
三、查找节点
这里用到了xpath,如果不知道xpath语法去网上搜一下,我敢肯定这是世界上最简单的语法。查找节点可以有两种情况,要么是一个list<...extend Node>,要么是一个Node值。获得Node之后可以强转成Element,然后的操作就很简单了。当然如果你要修改了某个节点必须在写回文件才能改变,要不就仅仅是在内存中修改了。具体例子请看下面的代码
下面是我写的一个完整的demo,仅供参考
以上代码没有写注释,相信你嫩理解!
一、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();
}
}
}
}
以上代码没有写注释,相信你嫩理解!
相关文章推荐
- FIDDLER的使用方法及技巧总结(连载二)FIDDLER用户界面
- svn自己的一些使用方法总结
- OracleTimesten使用方法总结
- Android关于PagerAdapter的使用方法的总结
- Android中使用代码截图的各种方法总结
- oracle 10g 管理权限和角色,以及有关方面的数据字典的使用方法总结
- web打印实现方案 Lodop6.034 使用方法总结 (博客园 )
- web打印实现方案 Lodop6.034 使用方法总结
- UITableView 基本使用方法总结
- Unity3D中uGUI事件系统简述及使用方法总结
- VC++中list::list的使用方法总结
- String.spit()的使用方法总结
- memcpy的使用方法总结
- Android Butterknife(黄油刀) 使用方法总结
- Android WebView的使用方法总结
- (转摘)GridView 使用方法总结
- struts基本使用方法总结
- js常用方法使用总结
- opencv 2.3.1使用CvvImage 的方法(总结)
- 使用JS,JQ获取offset-*,client-*,scroll-*的方法总结