Dom4j来操作xml

  第一步当然是导入包

 下面的代码是简单的增删改查

package com.sky.webexam.util.xml;

import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.struts2.components.File;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class XMLUtil {

    /**
     * @author weidan 2013-1-30 下午4:36:37
     * @param xmlFilePath
     *            这个xml文件生成到的文件目录的全路径,包括文件名,例如:d://myXmlFile.xml
     * @param rootNodeName
     *            节点的名字 remark:
     */
    public static void createXML(String xmlFilePath, String rootNodeName) {
        DocumentFactory factory = new DocumentFactory();// 创建一个文档工厂
        Document document = factory.createDocument(); // 创建一个文档
        document.addElement(rootNodeName); // 确认根节点的名字
        // 建立一个xml文件,将Dom4j树写入xml文件
        FileWriter fw = null;
        try {
            fw = new FileWriter(xmlFilePath);// 写的文件流,写到相应的地址
            XMLWriter writer = new XMLWriter(fw); // 新建xml写入流
            writer.write(document); // 将文档写入物理地址,持久化对象
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * @author weidan 2013-1-30 下午4:55:19
     * @param id
     * @param price
     * @param name
     * @param address
     * @param beginTime
     * @param endTime
     * @param xmlFilePath
     *            remark: 对文档结构进行改变 相当于增加的功能
     */
    public static void addUser(String uid, String userName,
            String userpassword, String xmlFilePath) {
        SAXReader reader = new SAXReader();
        reader.setStripWhitespaceText(true);
        FileWriter fw = null;
        try {
            Document document = reader.read(xmlFilePath); // 获取到文档
            Element root = document.getRootElement(); // 获取根节点
            Element userNode = root.addElement("user"); // 添加一个新的user节点
            userNode.addAttribute("id", uid); // 设置用户的属性

            Element userNameNode = userNode.addElement("userName"); // 在用户及诶单下面新增加一个用户名节点
            userNameNode.setText(userName); // 设置节点的文本中的值

            Element userPasswordNode = userNode.addElement("userPassword"); // 在用户及诶单下面新增加一个密码节点
            userPasswordNode.setText(userpassword); // 设置节点的文本中的值

            fw = new FileWriter(xmlFilePath);
            XMLWriter writer = new XMLWriter(fw);
            writer.write(document);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        } finally {
            try {
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * @author weidan 2013-1-30 下午5:20:14
     * @param id
     * @param xmlFilePath
     * @return remark:
     */
    public static Map<String, String> queryUser(String id, String xmlFilePath) {
        SAXReader reader = new SAXReader();
        Map<String, String> result = new HashMap<String, String>();
        int index = 0;
        try {
            Document document = reader.read(xmlFilePath);
            // 获取根节点
            Element root = document.getRootElement();
            // 获取根节点包含的所有子节点
            List nodes = root.elements();
            Element e;
            List sonNodes;
            Element sunE;
            for (Object element : nodes) {
                e = (Element) element;
                // 如果id值与设定的id值相等,则遍历该节点,获取信息
                if ((e.attribute("id")).getText().equals(id)) {
                    // 获取当前子节点的所有子节点
                    sonNodes = e.elements();
                    result.put("uid", id);
                    for (Object sunElement : sonNodes) {
                        sunE = (Element) sunElement;
                        result.put(sunE.getName(), sunE.getTextTrim());
                    }
                    break;
                }
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * @author weidan 2013-1-30 下午5:41:37
     * @param id
     * @param price
     * @param name
     * @param address
     * @param beginTime
     * @param endTime
     * @param xmlFilePath
     *            remark:修改用户的信息
     */
    public static void modifyUser(String id, String userName,
            String userPassword, String xmlFilePath) {
        SAXReader reader = new SAXReader();
        FileWriter fw = null;
        try {
            Document document = reader.read(xmlFilePath); // 获取到文档
            Element root = document.getRootElement(); // 获取根节点
            List nodes = root.elements(); // 获取根节点包含的所有子节点
            Element e;
            List sonNodes;
            for (Object element : nodes) {
                e = (Element) element;
                // 如果id值与设定的id值相等,则遍历该节点,获取信息
                if ((e.attribute("id")).getText().equals(id)) {
                    // 获取当前子节点的所有子节点
                    sonNodes = e.elements();
                    for (Object sonElement : sonNodes) {
                        Element sonNode = (Element) sonElement;
                        if (sonNode.getName().equals("userName")) {
                            sonNode.setText(userName);
                        }
                        if (sonNode.getName().equals("userPassword")) {
                            sonNode.setText(userPassword);
                        }
                    }
                    break;
                }
            }
            fw = new FileWriter(xmlFilePath);
            XMLWriter writer = new XMLWriter(fw);
            writer.write(document);

        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } finally {
            try {
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    
    /**
     * @author weidan       2013-1-30 下午6:00:20
     * @param id
     * @param xmlFilePath
     * remark: 删除一个用户
     */
    public static void deleteUser(String id,String xmlFilePath) {
        SAXReader reader = new SAXReader();
        try {
            Document document = reader.read(xmlFilePath);
            // 获取根节点
            Element root = document.getRootElement();
            // 获取根节点包含的所有子节点
            List nodes = root.elements();
            Element e;
            for (Object element : nodes) {
                e = (Element) element;
                // 如果id值与设定的id值相等,则遍历该节点,获取信息
                if ((e.attribute("id")).getText().equals(id)) {
                    // 删除该节点
                    root.remove(e);
                }
            }
            FileWriter fw = new FileWriter(xmlFilePath);
            XMLWriter writer = new XMLWriter(fw);
            writer.write(document);
            fw.close();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    
    public static void main(String[] args) {
          XMLUtil xu = new XMLUtil();
//             增加      
//          xu.addUser("1","weidan","weidan","d://a.xml"); 
          
//               查询
//          Map<String,String> map = xu.queryUser("1", "d://a.xml");
//          Set<Entry<String, String>>  entrys =  map.entrySet();
//          Iterator iterator= entrys.iterator();
//          while(iterator.hasNext()){
//              Entry<String,String> entry = (Entry<String, String>) iterator.next();
//              System.out.println("key: "+entry.getKey()+" value:"+entry.getValue());
//          }
          
//        修改
//          xu.modifyUser("1", "weidan1", "weidan1", "d://a.xml");
         
//        删除
//          xu.deleteUser("1", "d://a.xml");
          
      }
    
    
}

 

posted @ 2013-01-29 18:07  虎猫  阅读(174)  评论(0编辑  收藏  举报