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();添加注释

下面是一段代码

[java]  view plain  copy
  1. <span style="white-space:pre">      </span>Document doc = DocumentHelper.createDocument();  
  2.         doc.addComment("这只是个测试");  
  3.         Element root = doc.addElement("root");  
  4.         root.addElement("book").addAttribute("is_read""yes").addElement("name").addText("Think in Java");  
  5.         Element book = root.addElement("book").addAttribute("is_read""no").addComment("good book");  
  6.         book.addElement("name").addText("C编程思想");  
  7.         book.addElement("prise").addText("¥65.3");  
当然,现在创建的xml文件只是在内存中,还要写到本地文件中,请看下面一段代码

[java]  view plain  copy
  1. <span style="white-space:pre">      </span>OutputFormat format = OutputFormat.createCompactFormat();//这里定义了文件格式化类型,这个是紧凑型的  
  2.         format.setEncoding("GBK");  
  3.         XMLWriter writer = null;  
  4.         try{  
  5.             writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("./file/boos.xml")), format);  
  6.             writer.write(doc);  
  7.             writer.flush();  
  8.         }catch(IOException e){  
  9.             e.printStackTrace();  
  10.         }finally{  
  11.             try {  
  12.                 writer.close();  
  13.             } catch (IOException e) {  
  14.                 e.printStackTrace();  
  15.             }  
  16.         }  


二、遍历xml文件

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

[java]  view plain  copy
  1. private static void read() {  
  2.         SAXReader reader = new SAXReader();  
  3.         Document doc = null;  
  4.         try{  
  5.             doc = reader.read(new FileInputStream("./file/boos.xml"));  
  6.             doc.accept(new VisitorSupport(){  
  7.               
  8.                 public void visit(Element element){  
  9.                     System.out.println(element.getName());  
  10.                     System.out.println(element.getText());  
  11.                 }  
  12.             });  
  13.         }catch(Exception e){  
  14.             e.printStackTrace();  
  15.         }finally{  
  16.               
  17.         }  
  18.     }  
这里我只是简单的打印了一下,具体要什么操作随便就行。


三、查找节点

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

[java]  view plain  copy
  1. private static void xpathUse() {  
  2.         SAXReader reader = new SAXReader();  
  3.         Document doc = null;  
  4.         try{  
  5.             doc = reader.read(new FileInputStream("./file/boos.xml"));  
  6.         }catch(Exception e){  
  7.             e.printStackTrace();  
  8.         }  
  9.          Element e = (Element) doc.selectSingleNode("/root/book[1]");  
  10.          System.out.println(e.getName());  
  11.          e.addElement("prise").addText("¥23");  
  12.          write(doc);  
  13.         /*for(int i=0;i<list.size();i++){ 
  14.             Element e = (Element) list.get(i); 
  15.             System.out.println("name:"+e.getName()); 
  16.             System.out.println("text"+e.getText()); 
  17.         }*/  
  18.     }  

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


[java]  view plain  copy
  1. package test.demo;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6. import java.io.OutputStreamWriter;  
  7. import org.dom4j.Document;  
  8. import org.dom4j.DocumentHelper;  
  9. import org.dom4j.Element;  
  10. import org.dom4j.VisitorSupport;  
  11. import org.dom4j.io.OutputFormat;  
  12. import org.dom4j.io.SAXReader;  
  13. import org.dom4j.io.XMLWriter;  
  14.   
  15. public class Demo {  
  16.   
  17.     public static void main(String[] args) {  
  18.   
  19.         //createXML();  
  20.         //read();  
  21.           
  22.         xpathUse();  
  23.           
  24.     }  
  25.   
  26.     private static void xpathUse() {  
  27.         SAXReader reader = new SAXReader();  
  28.         Document doc = null;  
  29.         try{  
  30.             doc = reader.read(new FileInputStream("./file/boos.xml"));  
  31.         }catch(Exception e){  
  32.             e.printStackTrace();  
  33.         }  
  34.          Element e = (Element) doc.selectSingleNode("/root/book[1]");  
  35.          System.out.println(e.getName());  
  36.          e.addElement("prise").addText("¥23");  
  37.          write(doc);  
  38.         /*for(int i=0;i<list.size();i++){ 
  39.             Element e = (Element) list.get(i); 
  40.             System.out.println("name:"+e.getName()); 
  41.             System.out.println("text"+e.getText()); 
  42.         }*/  
  43.     }  
  44.   
  45.     private static void read() {  
  46.         SAXReader reader = new SAXReader();  
  47.         Document doc = null;  
  48.         try{  
  49.             doc = reader.read(new FileInputStream("./file/boos.xml"));  
  50.             doc.accept(new VisitorSupport(){  
  51.               
  52.                 public void visit(Element element){  
  53.                     System.out.println(element.getName());  
  54.                     System.out.println(element.getText());  
  55.                 }  
  56.             });  
  57.         }catch(Exception e){  
  58.             e.printStackTrace();  
  59.         }finally{  
  60.               
  61.         }  
  62.     }  
  63.   
  64.     private static void createXML() {  
  65.         Document doc = DocumentHelper.createDocument();  
  66.         doc.addComment("这只是个测试");  
  67.         Element root = doc.addElement("root");  
  68.         root.addElement("book").addAttribute("is_read""yes").addElement("name").addText("Think in Java");  
  69.         Element book = root.addElement("book").addAttribute("is_read""no").addComment("good book");  
  70.         book.addElement("name").addText("C编程思想");  
  71.         book.addElement("prise").addText("¥65.3");  
  72.           
  73.         write(doc);  
  74.     }  
  75.   
  76.     private static void write(Document doc) {  
  77.         OutputFormat format = OutputFormat.createCompactFormat();  
  78.         format.setEncoding("GBK");  
  79.         XMLWriter writer = null;  
  80.         try{  
  81.             writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("./file/boos.xml")), format);  
  82.             writer.write(doc);  
  83.             writer.flush();  
  84.         }catch(IOException e){  
  85.             e.printStackTrace();  
  86.         }finally{  
  87.             try {  
  88.                 writer.close();  
  89.             } catch (IOException e) {  
  90.                 e.printStackTrace();  
  91.             }  
  92.         }  
  93.     }  
  94.   
  95. }  

以上代码没有写注释,相信你嫩理解!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值