Java使用DOM4J对XML文件进行增删改查操作

Java进行XML文件操作,代码如下:

package com.founder.mrp.util;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;

import com.founder.mrp.domain.ClientLoginUser;
import com.founder.mrp.util.md5.MD5;

public class XMLOperateUser {
    
    /*
     * 查询全部xml
     * */
    public static List<ClientLoginUser> ListClinetLoginUser(String appDir) throws Exception{
        File dir = new File(appDir+"\persons.xml");        
        if (!dir.exists()) {
            dir.createNewFile();
            Document dom = DocumentHelper.createDocument();
            Element root = dom.addElement("persons");
            String dirpath = dir+"";
            UtilsForXML.writeToXML(dom, dirpath);
        }
        String dirPath = dir+"";
        Document dom = UtilsForXML.getDocument(dirPath);
        Element root = dom.getRootElement();        
        List<ClientLoginUser> persons = new ArrayList<ClientLoginUser>();
        
        List list = root.elements();
        for (int i = 0; i < list.size(); i++) {
            Element person = (Element) list.get(i);
            ClientLoginUser c = new ClientLoginUser();
            String id = person.attributeValue("id");
            c.setId(Integer.parseInt(id));
            List ll = person.elements();
            for (int j = 0; j < ll.size(); j++) {
                Element element = (Element) ll.get(j);
                if ("publishername".equals(element.getName())) {
                    String publisherName = element.getText();
                    c.setPublisherName(publisherName);
                }
                if ("serverurl".equals(element.getName())) {
                    String serverurl = element.getText();
                    c.setServerUrl(serverurl);
                }
                if ("username".equals(element.getName())) {
                    String username = element.getText();
                    c.setUserName(username);
                }
                if ("password".equals(element.getName())) {
                    String password = element.getText();
                    c.setPassword(password);
                }
            }
            persons.add(c);
        }
        return persons;        
    }
    
    /*
     * 根据person的属性id查询xml
     * */
    public static ClientLoginUser QueryClinetLoginUserById(String appDir,int id) throws Exception{
        File dir = new File(appDir+"\persons.xml");
        String dirPath = dir+"";        
        Document dom = UtilsForXML.getDocument(dirPath);        
        Element root = dom.getRootElement();        
        ClientLoginUser person = new ClientLoginUser();
        Element beQuery = (Element)root.selectSingleNode("//person[@id="+id+"]");
        if(beQuery!=null){
            person.setPublisherName(beQuery.elementText("publishername"));
            person.setServerUrl(beQuery.elementText("serverurl"));
            person.setUserName(beQuery.elementText("username"));
            person.setPassword(beQuery.elementText("password"));
            person.setId(id);
        }
        return person;                   
    }
    /*
     * 增加xml数据
     * */
    public static int AddClinetLoginUser(String appDir,String publisherName,String serverUrl,String userName,String passWord) throws Exception{
        File dir = new File(appDir+"\persons.xml");
        if (!dir.exists()) {
             dir.createNewFile();
        }
        int id = 1;
        String dirPath = dir+"";
        Document dom = UtilsForXML.getDocument(dirPath);        
        Element root = dom.getRootElement();
        List<Element> list = root.elements("person");
        if(!list.isEmpty()||list.size()!=0){
            int count = list.size();
            Element lastperson = list.get(count-1);
            String value = lastperson.attributeValue("id");
            id = Integer.parseInt(value)+1;
        }        
//        int id = (int) ((Math.random()*9+1)*1000);
        Element newPerson = root.addElement("person");
        newPerson.addAttribute("id", id+"");
        Element publishername = newPerson.addElement("publishername");
        publishername.setText(publisherName);
        Element serverurl = newPerson.addElement("serverurl");
        serverurl.setText(serverUrl);
        Element username = newPerson.addElement("username");
        username.setText(userName);
        Element password = newPerson.addElement("password");
        password.setText(passWord);
        UtilsForXML.writeToXML(dom, dirPath);
        return id;
    }
    
    /*
     * 根据person属性id修改xml数据
     * */
    public static int UpdateClinetLoginUser(int id,String appDir,String publisherName,String serverUrl,String userName,String passWord) throws Exception{
        File dir = new File(appDir+"\persons.xml");
        String dirPath = dir+"";        
        Document dom = UtilsForXML.getDocument(dirPath);        
        Element root = dom.getRootElement();
        Element beQuery = (Element)root.selectSingleNode("//person[@id="+id+"]");
        beQuery.element("publishername").setText(publisherName);
        beQuery.element("serverurl").setText(serverUrl);
        beQuery.element("username").setText(userName);
        beQuery.element("password").setText(passWord);
        UtilsForXML.writeToXML(dom, dirPath);
        return id;
    }
    /*
     * 根据person属性id删除xml数据
     * */
    public static int DeleteClinetLoginUser(int id,String appDir) throws Exception{
        File dir = new File(appDir+"\persons.xml");
        String dirPath = dir+"";        
        Document dom = UtilsForXML.getDocument(dirPath);        
        Element root = dom.getRootElement();
        Element beQuery = (Element)root.selectSingleNode("//person[@id="+id+"]");
        beQuery.getParent().remove(beQuery);
        UtilsForXML.writeToXML(dom, dirPath);
        return id;
    }
}

需要的工具类:

package com.founder.mrp.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;

import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class UtilsForXML {
    /**
     * 需要一个方法来创建DOM4j的XML解析器并返回一个document对象
     * add by hanwl
     * @throws Exception 
     */
    public static Document getDocument(String xmlPath) throws Exception {
        Reader reader = new InputStreamReader(new FileInputStream(new File(xmlPath)),"utf-8");
        SAXReader saxReader = new SAXReader();
        //将XML文件路径传给Document对象并返回其实例dom
        Document dom = saxReader.read(reader);
        return dom;
    }
    
    /**
     * 需要一个方法来将更新后的document对象写入到XML文件中去
     * add by hanwl
     * @throws Exception 
     */
    public static void writeToXML(Document dom ,String xmlPath) throws Exception{
        
        //首先创建样式和输出流
        OutputFormat format = new OutputFormat().createPrettyPrint();
        OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(xmlPath),"utf-8");
        //OutputStream out = new FileOutputStream(xmlPath);
        XMLWriter writer = new XMLWriter(out,format);
        
        //写入之后关闭流
        writer.write(dom);
        writer.close();
    }
}

用到的实体类:

package com.founder.mrp.domain;

public class ClientLoginUser {
    private int id;
    private String publisherName;
    private String serverUrl;
    private String userName;
    private String password;
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getPublisherName() {
        return publisherName;
    }
    public void setPublisherName(String publisherName) {
        this.publisherName = publisherName;
    }    
    public String getServerUrl() {
        return serverUrl;
    }
    public void setServerUrl(String serverUrl) {
        this.serverUrl = serverUrl;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }   
}

这是web程序操作的代码,一些controller请求和jsp页面没有放,主要看dom4j操作xml

下面是本次用例XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<persons> 
  <person id="1"> 
    <publishername>测试3</publishername>  
    <serverurl>http://loalhost</serverurl>  
    <username>test3</username>  
    <password>123456</password> 
  </person>  
  <person id="2"> 
    <publishername>测试4</publishername>  
    <serverurl>http://localhost</serverurl>  
    <username>test4</username>  
    <password>123456</password> 
  </person> 
</persons>
原文地址:https://www.cnblogs.com/loong-hon/p/10002047.html