应用dom4j操作xml文件

大家都知道dom4j 是一种解析 XML 文档的开放源代码 XML 框架。它是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。今天就拿dom4j中1.6.1版本为例!

如果我们利用dom4j来操作xml:

(1)首先要导入一个jar包,那就是dom4j

(2)其次定义一个解析类,以下给出部分代码:

import java.io.*;

import java.util.*;

import org.dom4j.*;

import org.dom4j.io.*;

import javax.servlet.http.HttpServlet;

public class XML {

 public static void main(String[] arg0)   

    {   

     XML sys = new XML();

     String str = sys.getProperty("UC.KEY");

     System.out.println("value:" + str);

    }

  public String getProperty(String parter){

     String returnStr = "";

     try {

      //获取绝对路径

StringfPath=Thread.currentThread().getContextClassLoader()

.getResource("").getPath().toString();

   //得到工程的WEB-INF路径

   fPath = fPath.substring(0,fPath.indexOf("WEB-INF")+8);

   File scXml = new File(fPath +"systemConfig.xml");

   SAXReader reader = new SAXReader();

   Document document = reader.read(scXml);

   Element root = document.getRootElement();

   Element foo;

   for (Iterator i = root.elementIterator("sConfig"); i.hasNext();) {

    foo = (Element) i.next();

    if(foo.elementText("name").equals(parter)){

     returnStr = foo.elementText("value");

    }

   }

  } catch (Exception e) {

   e.printStackTrace();

  }

     return returnStr;

    }

/*

 修改XML文档

 有三项修改任务,依次为:

 l        如果book节点中show属性的内容为yes,则修改成no

 2         把owner项内容改为Tshinghua,并添加date节点

 3         若title内容为Dom4j Tutorials,则删除该节点

*/

 public static boolean modifyDocument(File inputXml) {

  boolean returnValue = false;

  try {

   SAXReader saxReader = new SAXReader();

   Document document = saxReader.read(inputXml);

   /** 修改内容之一: 如果book节点中show属性的内容为yes,则修改成no */

   /** 先用xpath查找对象

   */

   List list = document.selectNodes("/books/book/@show");

   Iterator iter = list.iterator();

   while (iter.hasNext()) {

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

    System.out.print("show old = " + attribute.getValue());

    if (attribute.getValue().equalsIgnoreCase("no"))

     attribute.setValue("yes");

    System.out.println("| show new = " + attribute.getValue());//修改后的值

   }

   /**

    * 修改内容之二: 把owner项内容改为Tshinghua

    * 并在owner节点中加入date节点,date节点的内容为2010-02-05,还为date节点添加一个属性type

    */

   list = document.selectNodes("/books/owner");

   iter = list.iterator();

   while (iter.hasNext()) {

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

    ownerElement.setText("Change by alo "+System.currentTimeMillis());//设置内容

    //附件内容,有 date 节点则删除节点再添加

    Iterator dateiterator = ownerElement.elementIterator("date");

    while (dateiterator.hasNext()) {

     Element dateElement = (Element) dateiterator.next();

     System.out.println("删除前的date: "+dateElement.getText());

     System.out.println("dateElement = "+dateElement.getText());

     ownerElement.remove(dateElement);//删除节点

    }

    Element dateElement = ownerElement.addElement("date");//添加子节点

    dateElement.setText("2008-08-26");

    dateElement.addAttribute("type", "add by alo");

   }

   /** 修改内容之三: 若title内容为Study alo,则删除该节点 */

   list = document.selectNodes("/books/book");

   iter = list.iterator();

   while (iter.hasNext()) {

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

    Iterator iterator = bookElement.elementIterator("title");

    while (iterator.hasNext()) {

     Element titleElement = (Element) iterator.next();

     if (titleElement.getText().equalsIgnoreCase("Study alo")) {

      bookElement.remove(titleElement);//删除节点

     }

    }

   }

 

 

   try { 

 

    /** 将document中的内容写入文件中 */

    XMLWriter writer = new XMLWriter(new FileWriter(inputXml));

    writer.write(document);

    writer.close();

   

    /** 执行成功,需返回true */

    returnValue = true;

   } catch (Exception ex) {

    ex.printStackTrace();

   }

 

 

  } catch (Exception ex) {

 

 

   ex.printStackTrace();

  }

  return returnValue;

 }

 

 

}

 

 

posted @ 2011-12-03 00:36  qiforme  阅读(211)  评论(0编辑  收藏  举报