天天看點

dom4j(Java code)

import java.io.File;

import java.io.FileWriter;

import java.util.Iterator;

import java.util.List;

import org.dom4j.Attribute;import org.dom4j.Document;

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

  

 public boolean createXML(String fileName){

   boolean isOk= false;

   //建立document對象

    Document doc= DocumentHelper.createDocument();

   //建立XML文檔的根books

    Element students= doc.addElement("students");

    students.addComment("This is a test for dom4j");//加入一行注釋

    

    Element student= students.addElement("student");//加入第一個student節點

    student.addAttribute("value","god");//加入value屬性和值

    Element name= student.addElement("name");//加入name節點

    name.setText("finina");//為name設定值

    Element age=student.addElement("age");//加入age節點

    age.setText("25");//為age設定值

    Element sex=student.addElement("sex");//加入sex節點

    sex.setText("male");//為sex設定值

    

    student= students.addElement("student");

    student.addAttribute("value","cat");

    name= student.addElement("name");

    name.setText("fly");

    age=student.addElement("age");

    age.setText("17");

    sex=student.addElement("sex");

    sex.setText("female");

   

    Element team=students.addElement("team");

    team.addText("05093A");

   

   try{

      OutputFormat format= OutputFormat.createPrettyPrint();//設定格式

      format.setEncoding("GBK");//必要,否則無法解析中文

      //輸出為檔案

      XMLWriter writer= new XMLWriter(new FileWriter(fileName),format);

      writer.write(doc);

      writer.flush();

     //

      isOk= true;

    }catch(Exception e){

      e.printStackTrace();

    }

   return isOk;

  }

 public boolean modifigXML(String oldFileName,String newFileName){

   boolean isOk= false;

   try{

      SAXReader reader= new SAXReader();//建立SAX閱讀器

      Document doc= reader.read(new File(oldFileName));//将所有檔案内容讀取生存Document對象

      

      List list= doc.selectNodes("/students/student/@value");//搜尋出所有位于students節點下的student節點中的value屬性位置放入集合中

      Iterator iter= list.iterator();//加載疊代器

      //疊代集合

      while(iter.hasNext()){

        Attribute attr= (Attribute)iter.next();

       if(attr.getValue().equals("god"))//比對值是否相等

          attr.setValue("king");//設定值

      }

      list= doc.selectNodes("/students/team");//搜尋出所有位于students節點下team節點位置放入集合中

      iter= list.iterator();//加載疊代器

      //疊代集合

      if(iter.hasNext()){

        Element team= (Element)iter.next();

        team.setText("05084A");//設定值

        Element teacher= team.addElement("teacher");//添加節點

        teacher.setText("godfather");//為新的節點設定值

        teacher.addAttribute("skill","programme");//為新的節點添加屬性

      }

     

      list= doc.selectNodes("/students/student");//搜尋出所有位于students節點下的student節點位置放入集合中

      iter= list.iterator();//加載疊代器

      //疊代集合

      while(iter.hasNext()){

        Element elem= (Element)iter.next();

        Iterator iterElem= elem.elementIterator("age");//将該節點下所有的age節點生成一個疊代器

        //疊代集合

        if(iterElem.hasNext()){

          Element remTitle= (Element)iterElem.next();

         if(remTitle.getText().equals("17"))//對比值

            elem.remove(remTitle);//移除該節點

        }

      }

     //将doc中的内容寫入檔案中

      OutputFormat format= OutputFormat.createPrettyPrint();//設定格式

      format.setEncoding("GBK");//必要,否則無法解析中文

       //輸出為檔案,以上操作隻是在記憶體中修改,需要儲存為檔案來确認修改

      XMLWriter writer= new XMLWriter(new FileWriter(newFileName),format);

      writer.write(doc);

      writer.flush();

      isOk= true;

    }catch(Exception e){

      e.printStackTrace();

    }

   return isOk;

  }

 

 public void readXML(String fileName){

   try{

      File file= new File(fileName);//建立檔案對象

      SAXReader reader= new SAXReader();//建立SAX閱讀器

      Document doc= reader.read(file);//讀取内容生成Document對象

      Element root= doc.getRootElement();//取得根節點

      search(root);//開始周遊

    }catch(Exception e){

      e.printStackTrace();

    }

  }

  

 //遞歸周遊

  private void search(Element root) {

    Iterator it_element= root.elementIterator();//将根節點下包含的元素組織成一個疊代器

    //疊代

    while( it_element.hasNext()) {

      Element element= (Element)it_element.next();

     if(!element.getText().equals(""))

      {

        System.out.println(element.getName()+"節點的值是"+element.getText());

      }

     else

      {

        System.out.println(element.getName()+"節點");

      }

      Iterator it_attr= element.attributeIterator();

     while( it_attr.hasNext()) {

        Attribute attr= (Attribute)it_attr.next();

       if(attr!=null)

        {

          System.out.println(element.getName()+"節點的屬性"+attr.getName()+ "的值是" + attr.getValue());

        }

      }

      search(element);//遞歸調用

    }

  }

 

 public static void main(String[] args){

   long start= System.currentTimeMillis();//開始計時

    Dom4jDemo dom4jDemo= new Dom4jDemo();

    String fileName= "dom4jDemo.xml";

    String newFileName= "new_dom4jDemo.xml";

    System.out.println(fileName+"正在建立中...");

   boolean isOk_create= dom4jDemo.createXML(fileName);

   if(isOk_create) System.out.println(fileName+"建立成功!");

   else System.out.println("建立失敗!請檢查後重新再試!");

    

    System.out.println("正在更新中...");

   boolean isOk_modi= dom4jDemo.modifigXML(fileName, newFileName);

   if(isOk_modi) System.out.println("恭喜,更新完成!");

   //

    System.out.println("正在讀取檔案"+fileName+" ...");

    System.out.println("------------------------------------------------");

    dom4jDemo.readXML(fileName);

    System.out.println("------------------------------------------------");

    System.out.println(fileName+"讀取成功!");

    System.out.println("正在讀取檔案"+newFileName+" ...");

    System.out.println("------------------------------------------------");

    dom4jDemo.readXML(newFileName);

    System.out.println("------------------------------------------------");

    System.out.println(fileName+"讀取成功!");

    System.out.println("一共耗時:"+(System.currentTimeMillis()-start)+"毫秒!");

  }

}