DOM4J使用教程

以下转自http://virgos.iteye.com/blog/185844

 

DOM4j是一个易用的,开源的JAVA操作XML的API,写过一篇4种XML操作API的比较,DOM4j是性能和易用行最佳的。因此做一个小教程,供初学者学习。

学习DOM4j首先就先来了解下它主要的包

DOM4j所有的接口都在org.dom4j这个包里定义着

org.dom4j.Attribute : Attribute接口定义了XML文件的属性
org.dom4j.Branch  : Branch为能够包含子节点的节点如XML元素和文档定义了一个公共行为
org.dom4j.CDATA  : CDATA定义了XML CDATA区域
org.dom4j.CharacterData: CharacterData是一个标识接口,标识基于字符的节点。
org.dom4j.Comment  : Comment定义了XML注释的行为
org.dom4j.Document : Docement接口定义了XML文档
org.dom4j.Element   : Element定义了XML元素
org.dom4j.ElementHandler: ElementHandler定义了Element对象的处理器
org.dom4j.ElementPath : 被ElementHandler使用,用于取得当前正在处理的路径层次信息
org.dom4j.Entity : Entity定义XML entity
org.dom4j.Node :   Node为所有的dom4j中XML节点定义了多态行为
org.dom4j.NodeFilter :  NodeFilter定义了在dom4j节点中产生的一个滤镜或谓词的行为
org.dom4j.ProcessingInstruction : ProcessingInstruction定义XML处理指令
org.dom4j.Text   : Test定义了XML文本节点
org.dom4j.Visitor : Visitor用于实现Visitor模式
org.dom4j.XPath : XPath在分析一个字符串后会提供一个XPath表达式

下面说下主要的实用方法

          1:  读取并解析XML文档:

               读写XML文档主要依赖于org.dom4j.io包,提供了DOMReader和SAXReader两类不同方式,调用方式一样。

           // 从文件读取XML,输入文件名,返回XML文档

    public Document read(String fileName) throws MalformedURLException, DocumentException {
     
               SAXReader reader = new SAXReader();

             Document document = reader.read(new File(fileName));

             return document;
        }
   2:取得ROOT节点
         如果要读取一个XML文件,最重要的就是要读取ROOT节点了,一切分析XML都是从ROOT节点开始。
    
    public Element getRootElement(Document doc){
             return doc.getRootElement();
     }

   3:遍历XML树,这里有二种方法
      (1): 枚举
           // 枚举所有子节点
    for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
       Element element = (Element) i.next();
       // do something
    }
    // 枚举名称为foo的节点
    for ( Iterator i = root.elementIterator(foo); i.hasNext();) {
       Element foo = (Element) i.next();
       // do something
    }
    // 枚举属性
    for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
       Attribute attribute = (Attribute) i.next();
       // do something
    }

  (2) :  递归
     public void treeWalk() {
       treeWalk(getRootElement());
    }
    public void treeWalk(Element element) {
       for (int i = 0, size = element.nodeCount(); i < size; i++)     {
           Node node = element.node(i);
           if (node instanceof Element) {
              treeWalk((Element) node);
           } else { // do something....
           }
       }
}

  4:字符串与XML的转换
   // XML转字符串
  Document document = ...;
    String text = document.asXML();
  // 字符串转XML
    String text = James ;
    Document document = DocumentHelper.parseText(text);

  5. 创建XML
     这里创建一个XML,没有写
    public Document createDocument() {
       Document document = DocumentHelper.createDocument();
       Element root = document.addElement(root);
       Element author1 =
           root
              .addElement(author)
              .addAttribute(name, James)
              .addAttribute(location, UK)
              .addText(James Strachan);
       Element author2 =
           root
              .addElement(author)
              .addAttribute(name, Bob)
              .addAttribute(location, US)
              .addText(Bob McWhirter);
       return document;
    }
   6: XML 文件输出
   FileWriter out = new FileWriter( foo.xml );
    document.write(out);
  

    DOM4j 的简单常用的方法上面总结了下,大家可以有一个印象,想要学的仔细了就要自己好好研究了,下面有一个以前写的小程序,实现了创建和编辑XML文件的功能。

package com.dom4j.test;   
import java.io.File;   
import java.io.FileWriter;   
import java.io.IOException;   
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 NewXML {   
 /**  
  *   
  * 用DOM4J创建一个XML文件  
  * @param args  
  */  
    
 public boolean newXMl(String fileName){   
     
  boolean returnValue=false;   
     
  //定义一个XML文档   
     
  Document docement=DocumentHelper.createDocument();   
     
  //设置XML文档的元素   
  Element rootElement=docement.addElement("DOM4J创建XML文档");   
     
  rootElement.addComment("镜花水月2007-4-24晚上创建");   
     
  Element nameElement=rootElement.addElement("镜花水月");   
     
  nameElement.addAttribute("名字","不告诉你");   
     
  Element schoolElement=nameElement.addElement("学校");   
     
  schoolElement.setText("西安翻译学院");   
     
  Element cityElement=rootElement.addElement("城市");   
     
  cityElement.setText("上海");   
     
  Element homeElement=cityElement.addElement("住址");   
     
  homeElement.setText("徐家汇");   
     
  //创建XML文档    
  try {   
      
            /** 格式化输出,类型IE浏览一样 */  
      
   OutputFormat format = OutputFormat.createPrettyPrint();   
      
   /** 指定XML编码 */  
      
   format.setEncoding("GBK");   
      
   XMLWriter writer=new XMLWriter(new FileWriter(new File(fileName)),format);    
               
          writer.write(docement);   
             
   writer.close();   
      
   return returnValue=true;      
      
      
  } catch (IOException e) {   
      
   e.printStackTrace();   
  }   
     
     
     
  return returnValue;   
     
 }   
    
 /**  
  *   
  * 用DOM4J修改一个XML文件  
  * @param args  
  *   
  */  
    
 public boolean update(String fileName,String newFileName){   
     
  boolean returnValaue=false;   
     
     
     
  SAXReader reader=new SAXReader();   
     
  try {   
   Document docement=reader.read(new File(fileName));   
      
   List list=null;   
      
   list=docement.selectNodes("/DOM4J创建XML文档/镜花水月/@名字");   
      
   Iterator it=list.iterator();   
      
   while(it.hasNext()){   
    Attribute attribute=(Attribute) it.next();   
    if(attribute.getValue().equals("不告诉你")){   
     attribute.setValue("还是不告诉你");   
    }   
   }   
      
   //将就该写入新的文件    
      
   try {   
    //转码   
    OutputFormat format=OutputFormat.createPrettyPrint();   
       
    format.setEncoding("GBK");   
       
    XMLWriter writer=new XMLWriter(new FileWriter(new File(newFileName)),format);   
       
    writer.write(docement);   
       
    writer.close();   
       
    return returnValaue=true;   
       
   } catch (IOException e) {   
       
    e.printStackTrace();   
   }   
      
      
  } catch (DocumentException e) {   
      
   e.printStackTrace();   
  }   
     
  return returnValaue;   
 }   
 public static void main(String[] args) {   
     
  NewXML newXml=new NewXML();   
     
  String name="newXML.xml";   
     
  String newName="UpdateXML.xml";   
     
  if(!newXml.newXMl(name)){   
   System.out.println("创建出现错误!");   
   return ;   
  }else{   
   System.out.println("创建XML成功!");   
  }   
     
  if(!newXml.update(name,newName)){   
   System.out.println("修改出现错误!");   
   return;   
  }else{   
   System.out.println("修改XML成功");   
  }   
     
 }   
}  

  

<?xml version="1.0" encoding="GBK"?>   
  
<DOM4J创建XML文档>   
  <!--镜花水月2007-4-24晚上创建-->   
  <镜花水月 名字="不告诉你">   
    <学校>西安翻译学院</学校>   
  </镜花水月>   
  <城市>上海   
    <住址>徐家汇</住址>   
  </城市>   
</DOM4J创建XML文档> 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值