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;public class Dom4jDemo { public boolean createXML(String fileName){ boolean isOk= false; //建立document对象 Document doc= DocumentHelper.createDocument(); //建立XML文档的根books Element students= doc.addElement("students"); students.addComment("This is a test for dom4j");//加入一行注释 /**加入第一个student节点*/ Element student= students.addElement("student");//加入第一个student节点 student.addAttribute("value","god");//加入value属性和值 Element name= student.addElement("name");//加入name节点 name.setText("finina");//为name设置值 Element age=student.addElement("age");//加入age节点 age.setText("25");//为age设置值 Element sex=student.addElement("sex");//加入sex节点 sex.setText("male");//为sex设置值 /**加入第二个student节点*/ student= students.addElement("student"); student.addAttribute("value","cat"); name= student.addElement("name"); name.setText("fly"); age=student.addElement("age"); age.setText("17"); sex=student.addElement("sex"); sex.setText("female"); /**加入team节点*/ Element team=students.addElement("team"); team.addText("05093A"); /** *将doc中的内容写入xml文件中 **/ try{ OutputFormat format= OutputFormat.createPrettyPrint();//设置格式 format.setEncoding("GBK");//必要,否则无法解析中文 //输出为文件 XMLWriter writer= new XMLWriter(new FileWriter(fileName),format); writer.write(doc); writer.flush(); // isOk= true; }catch(Exception e){ e.printStackTrace(); } return isOk; } public boolean modifigXML(String oldFileName,String newFileName){ boolean isOk= false; try{ SAXReader reader= new SAXReader();//创建SAX阅读器 Document doc= reader.read(new File(oldFileName));//将所有文件内容读取生存Document对象 /**修改内容之一: 如果student节点中value属性的内容为god,则修改成king *因为做人不能太嚣张 */ List list= doc.selectNodes("/students/student/@value");//搜索出所有位于students节点下的student节点中的value属性位置放入集合中 Iterator iter= list.iterator();//加载迭代器 //迭代集合 while(iter.hasNext()){ Attribute attr= (Attribute)iter.next(); if(attr.getValue().equals("god"))//比对值是否相等 attr.setValue("king");//设置值 } list= doc.selectNodes("/students/team");//搜索出所有位于students节点下team节点位置放入集合中 iter= list.iterator();//加载迭代器 //迭代集合 if(iter.hasNext()){ Element team= (Element)iter.next(); team.setText("05084A");//设置值 Element teacher= team.addElement("teacher");//添加节点 teacher.setText("godfather");//为新的节点设置值 teacher.addAttribute("skill","programme");//为新的节点添加属性 } /**修改内容之三: 若age内容为17,则删除该节点 *未成年人需要被保护... */ list= doc.selectNodes("/students/student");//搜索出所有位于students节点下的student节点位置放入集合中 iter= list.iterator();//加载迭代器 //迭代集合 while(iter.hasNext()){ Element elem= (Element)iter.next(); Iterator iterElem= elem.elementIterator("age");//将该节点下所有的age节点生成一个迭代器 //迭代集合 if(iterElem.hasNext()){ Element remTitle= (Element)iterElem.next(); if(remTitle.getText().equals("17"))//对比值 elem.remove(remTitle);//移除该节点 } } //将doc中的内容写入文件中 OutputFormat format= OutputFormat.createPrettyPrint();//设置格式 format.setEncoding("GBK");//必要,否则无法解析中文 //输出为文件,以上操作只是在内存中修改,需要保存为文件来确认修改 XMLWriter writer= new XMLWriter(new FileWriter(newFileName),format); writer.write(doc); writer.flush(); isOk= true; }catch(Exception e){ e.printStackTrace(); } return isOk; } /** *the method readXML */ public void readXML(String fileName){ try{ File file= new File(fileName);//创建文件对象 SAXReader reader= new SAXReader();//创建SAX阅读器 Document doc= reader.read(file);//读取内容生成Document对象 Element root= doc.getRootElement();//取得根节点 search(root);//开始遍历 }catch(Exception e){ e.printStackTrace(); } } //递归遍历 private void search(Element root) { Iterator it_element= root.elementIterator();//将根节点下包含的元素组织成一个迭代器 //迭代 while( it_element.hasNext()) { Element element= (Element)it_element.next(); if(!element.getText().equals("")) { System.out.println(element.getName()+"节点的值是"+element.getText()); } else { System.out.println(element.getName()+"节点"); } Iterator it_attr= element.attributeIterator(); while( it_attr.hasNext()) { Attribute attr= (Attribute)it_attr.next(); if(attr!=null) { System.out.println(element.getName()+"节点的属性"+attr.getName()+ "的值是" + attr.getValue()); } } search(element);//递归调用 } } /** *the method main */ public static void main(String[] args){ long start= System.currentTimeMillis();//开始计时 Dom4jDemo dom4jDemo= new Dom4jDemo(); String fileName= "dom4jDemo.xml"; String newFileName= "new_dom4jDemo.xml"; System.out.println(fileName+"正在创建中..."); boolean isOk_create= dom4jDemo.createXML(fileName); if(isOk_create) System.out.println(fileName+"创建成功!"); else System.out.println("创建失败!请检查后重新再试!"); System.out.println("正在更新中..."); boolean isOk_modi= dom4jDemo.modifigXML(fileName, newFileName); if(isOk_modi) System.out.println("恭喜,更新完成!"); // System.out.println("正在读取文件"+fileName+" ..."); System.out.println("------------------------------------------------"); dom4jDemo.readXML(fileName); System.out.println("------------------------------------------------"); System.out.println(fileName+"读取成功!"); System.out.println("正在读取文件"+newFileName+" ..."); System.out.println("------------------------------------------------"); dom4jDemo.readXML(newFileName); System.out.println("------------------------------------------------"); System.out.println(fileName+"读取成功!"); System.out.println("一共耗时:"+(System.currentTimeMillis()-start)+"毫秒!"); }}
抱最大的希望,为最大的努力,做最坏的打算