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"); } }