Java代码 /** * */ package jeelee.main; import java.io.File; import java.io.FileWriter; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; /** * 功能:对xml的操作 * @author jeelee */ public class XMLOperation { Document document = null ; Element rootElement = null,element = null; SAXReader saxReader = null ; List list = null ; Iterator iterator = null ; Attribute attribute = null; /** *功能:构造函数,加载XML,创建Document *@param fileName,String 类型,XML文件名 *@return 无 */ public XMLOperation(String fileName) { try { saxReader = new SAXReader(); File file = new File(fileName); if(!file.exists()) { System.out.println(fileName + " 文件不存在!"); } document = saxReader.read(fileName); } catch(Exception ex) { ex.printStackTrace(); } } /** * 功能:获得根节点 * @param fileName,String类型, XML文件名 * @return Element 类型,返回根节点 */ public Element getRootElement(String fileName) { Element rootElement = null ; try { SAXReader saxReader = new SAXReader() ; Document document = saxReader.read(new File(fileName)); rootElement = document.getRootElement(); } catch(Exception ex) { ex.printStackTrace(); } return rootElement ; } /** * 功能:获得指定节点的值 * @param elementStr,String 类型, 指定的节点 * @return 无 */ public String getElementValue(String elementStr) { String valueStr = "" ; list = document.selectNodes(elementStr); iterator = list.iterator(); while(iterator.hasNext()) { element = (Element)iterator.next(); valueStr = element.getText(); } return valueStr ; } /** * 功能:获得指定节点的指定属性的值 * @param attribueStr,String 类型, 指定的节点 * @return 无 */ public String getAttributeValue(String attribueStr) { String valueStr = "" ; list = document.selectNodes(attribueStr); iterator = list.iterator(); while(iterator.hasNext()) { Attribute attribute = (Attribute)iterator.next(); valueStr = attribute.getValue(); } return valueStr ; } /** * 功能:设置指定节点的值,调用此函数后需要调用writeXML(String fileName)函数以保存修改结果 * @param elementStr, String 类型,指定的节点; * @param valueStr String 类型 * @return 无 */ public void setElementValue(String elementStr,String valueStr) { list = document.selectNodes(elementStr); iterator = list.iterator(); while(iterator.hasNext()) { element = (Element)iterator.next(); element.setText(valueStr); } } /** * 功能:设置指定节点的指定属性值,调用此函数后需要调用writeXML(String fileName)函数以保存修改结果 * @param attributeStr,String 类型,指定节点的指定属性 * @param attributeValue,String 类型,属性值 * @return 无 */ public void setAttributeValue(String attributeStr,String attributeValue) { list = document.selectNodes(attributeStr); iterator = list.iterator(); while(iterator.hasNext()) { Attribute attribute = (Attribute)iterator.next(); attribute.setValue(attributeValue); } } /** * 功能:在指定的节点下增加一个子节点,并为其指定值,调用此函数后需要调用writeXML(String fileName)函数以保存修改结果 * @param parentElement,String 类型,指定的父节点 * @param childElementStr,String 类型,要增加的子节点 * @param elementValue,String 类型,新增子节点的值 * @return 无 */ public void addElement(String parentElement,String childElementStr,String elementValue) { list = document.selectNodes(parentElement); iterator = list.iterator(); while(iterator.hasNext()) { element = (Element)iterator.next(); Element childElement = element.addElement(childElementStr); childElement.setText(elementValue); } } /** * 功能:在指定的节点中增加一个属性,并为其指定值,调用此函数后需要调用writeXML(String fileName)函数以保存修改结果 * @param parentElement,String 类型,指定的父节点 * @param newAttribute,String 类型,要增加的属性 * @param attributeValue,String 类型,新增属性的值 * @return 无 */ public void addAttribute(String element,String newAttribute,String attributeValue) { list = document.selectNodes(element); iterator = list.iterator(); while(iterator.hasNext()) { Element elem = (Element)iterator.next(); Attribute attribute = (Attribute) elem.addAttribute(newAttribute, attributeValue); } } /** * 功能:删除一个节点下的子节点,调用此函数后需要调用writeXML(String fileName)函数以保存修改结果 * @param parentElement,String 类型,父节点 * @param childElement,String 类型,要删除的子节点 */ public void deleteElement(String parentElement,String childElement) { list = document.selectNodes(parentElement); iterator = list.iterator(); while(iterator.hasNext()) { element = (Element)iterator.next(); Iterator iter = element.elementIterator(childElement); while(iter.hasNext()) { Element elem = (Element)iter.next(); element.remove(elem); } } } /** * 功能:删除一个节点的属性,调用此函数后需要调用writeXML(String fileName)函数以保存修改结果 * @param elementStr,String 类型,指定的节点;attributeStr,String 类型,指定要删除的属性 * @return 无 */ public void deleteAttribute(String elementStr,String attributeStr) { list = document.selectNodes(elementStr); iterator = list.iterator(); List lst = document.selectNodes(elementStr + "/@" + attributeStr); Iterator iter = null ; while(iterator.hasNext()) { element = (Element)iterator.next(); System.out.println("节点:"+element.getName()); iter = lst.iterator(); while(iter.hasNext()) { attribute = (Attribute)iter.next(); System.out.println("属性:"+attribute.getName()); element.remove(attribute); } } } /** * 功能:写入XML文件 * @param fileName,String 类型,要写入的XML文件 * @return returnValue,int 类型,1:表示写入成功,0:表示写入失败 */ public int writeXML(String fileName) { int returnValue = 0 ; try { XMLWriter writer = new XMLWriter(new FileWriter(new File(fileName))); writer.write(document); writer.close(); returnValue = 1 ; } catch(Exception ex) { ex.printStackTrace(); returnValue = 0 ; } return returnValue ; } /** * 功能:格式化XML文档,并解决中文问题 * @param filename ,String 类型,要格式化的XML文件名 * @return int */ public int formatXMLFile(String filename) { int returnValue = 0; try { SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File(filename)); XMLWriter output = null; /**格式化输出,类型IE浏览一样*/ OutputFormat format = OutputFormat.createPrettyPrint(); /** 指定XML字符集编码 */ format.setEncoding("UTF-8"); output = new XMLWriter(new FileWriter(new File(filename)),format); output.write(document); output.close(); /**执行成功,需返回1 */ returnValue = 1; } catch(Exception ex) { ex.printStackTrace(); } return returnValue ; } /** * 作用:遍历 xml * @param element,Element 类型,指定遍历的节点 * @return 无 */ public void visitXML(Element element) { Iterator iter = element.elementIterator(); while (iter.hasNext()) { element = (Element)iter.next(); Iterator iter2 = element.elementIterator(); if (!iter2.hasNext()) { System.out.println("节点:"+element.getName()+"节点值:"+element.getText()); } visitXML(element); } } } XML文件: <?xml version="1.0" encoding="UTF-8"?> <calendar> <config> <tiprate>12</tiprate> <tip>Y</tip> <autorun>N</autorun> <clock>3.swf</clock> <alpha>100</alpha> <winlocal>1</winlocal> <wintop>Y</wintop> </config> </calendar> 来源:http://jeelee.javaeye.com/blog/550053