jeelee 发表于 2013-2-3 14:44:03

java 操作XML

/** * 注意:需要导入dom4j-1.6.1.jar,jaxen-1.1-beta-6.jar 两个包 *如果没有导入jaxen-1.1-beta-6.jar 这个包,则会报错:java.lang.noclassdeffounderror: org/jaxen/jaxenexception*/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文件名      * @returnint   */      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>
页: [1]
查看完整版本: java 操作XML