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

时间:2022-10-20 22:22:52

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>