DOM4J解析xml文件001

来源:百度文库 编辑:神马文学网 时间:2024/04/29 08:15:11
虽然DOM4J 代表了完全独立的开发结果,但最初,它是JDOM 的一种智能分支。它合并了许多超出基本XML 文档表示的功能,包括集成的XPath 支持、XML Schema 支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过 DOM4J API 和标准DOM 接口具有并行访问功能。从 2000 下半年开始,它就一直处于开发之中。

  为支持所有这些功能,DOM4J 使用接口和抽象基本类方法。DOM4J 大量使用了API 中的 Collections 类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然 DOM4J 付出了更复杂的 API 的代价,但是它提供了比 JDOM 大得多的灵活性。
  在添加灵活性、XPath 集成和对大文档处理的目标时,DOM4J 的目标与 JDOM 是一样的:针对 Java 开发者的易用性和直观操作。它还致力于成为比 JDOM 更完整的解决方案,实现在本质上处理所有 Java/XML 问题的目标。在完成该目标时,它比 JDOM 更少强调防止不正确的应用程序行为。 DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。   注意: dom4j1.6解压后有一个dom4j-1.6.1.jar文件,这就是应用时需要引入的类包,另外还有一个jaxen-1.1-beta-6.jarr文件,一般也需要引入,否则执行时可能抛java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常,其他的包可以选择用之。   举例说明: 创建一个emps.xml文档 package com.xml;   import java.io.FileWriter; import java.io.IOException; import java.io.Writer;   import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter;   publicclass Dom4JXML {         publicvoid createXML() {         //用工厂类创建一个document实例         Document doc = DocumentHelper.createDocument();         //创建根元素emps         Element rootEle = doc.addElement("emps");         //添加注释         rootEle.addComment("这是一个dom4j生成的xml文件");         //emps根节点下创建一个emp节点         Element empEle = rootEle.addElement("emp");         //emp添加属性id="1"         empEle.addAttribute("id", "1");         //emp节点下创建一个name节点         Element nameEle = empEle.addElement("name");         //name节点下创建一个文本节点zhangsan         nameEle.setText("zhangsan");         //再为name节点创建一个兄弟节点         Element sexEle = empEle.addElement("sex");         sexEle.setText("man");         //将document中的内容写入文件中         try {             Writer out = new FileWriter("F:\\emps.xml");             //格式化输出,类型IE浏览一样             OutputFormat format = OutputFormat.createPrettyPrint();             //OutputFormat format = OutputFormat.createCompactFormat();             format.setEncoding("UTF-8"); //创建写出对象             XMLWriter writer = new XMLWriter(out,format);             writer.write(doc);             writer.close();             System.out.println("生成emps.xml成功。");         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();             System.out.println("失败了。");         }     }     publicstaticvoid main(String[] args) {         new Dom4JXML().createXML();     }   } 文档内容:                  zhangsan     man     将创建的emps.xml文档修改生成emps(update).xml 1. emp属性id 修改为:001 2. name中的文本修改为:张三 3. 删除emp下的sex属性   package com.xml;   import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.Iterator; import java.util.List;   import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter;   publicclass Dom4JXML {         publicvoid updateXML(){         try {             //创建读入对象             SAXReader reader = new SAXReader();             //创建document实例             Document doc = reader.read("F:\\emps.xml");             //查找节点emp下的id属性             List listAttr = doc.selectNodes("/emps/emp/@id");             Iterator itAttr = listAttr.iterator();             while(itAttr.hasNext()){                 Attribute attr = (Attribute) itAttr.next();                 //emp属性修改为001                 attr.setValue("001");             }             //查找emp下的name节点             List listText = doc.selectNodes("/emps/emp/name");             Iterator itText = listText.iterator();             while(itText.hasNext()){                 Element textEle = (Element) itText.next();                 //name节点的文本内容修改为"张三"                 textEle.setText("张三");             }             //查找emp节点             List listEle = doc.selectNodes("/emps/emp");             Iterator itEle = listEle.iterator();             while(itEle.hasNext()){                 Element empEle = (Element) itEle.next();                 //查找emp下的sex节点                 Iterator itSex = empEle.elementIterator("sex");                 while(itSex.hasNext()){                     Element sexEle = (Element) itSex.next();                     //删除sex节点                     empEle.remove(sexEle);                 }             }             //创建写出流             Writer out = new FileWriter("F:\\emps(update).xml");             // 格式化输出             OutputFormat format = OutputFormat.createPrettyPrint();             //OutputFormat format = OutputFormat.createCompactFormat();             format.setEncoding("UTF-8");             //创建写出对象             XMLWriter writer = new XMLWriter(out,format);             writer.write(doc);             writer.close();             System.out.println("生成emps(update).xml成功。");                     } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }             }     publicstaticvoid main(String[] args) {         new Dom4JXML().updateXML();     } }