欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

dom4j操作XML

程序员文章站 2022-05-28 20:28:16
...
虽然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异常,其他的包可以选择用之。
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.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Dom4jDemo {
	 public void 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("失败了。");
	        }
	    }

	 public void updateXML(){
	        try {
	            //创建读入对象
	            SAXReader reader = new SAXReader();
	            //创建document实例
	            Document doc = reader.read("F:\\emps.xml");
	            //查找节点emp下的id属性
	            List<Object> listAttr = doc.selectNodes("/emps/emp/@id");
	            Iterator<Object> itAttr = listAttr.iterator();
	            while(itAttr.hasNext()){
	                Attribute attr = (Attribute) itAttr.next();
	                //emp属性修改为001
	                attr.setValue("001");
	            }
	            //查找emp下的name节点
	            List<Object> listText = doc.selectNodes("/emps/emp/name");
	            Iterator<Object> itText = listText.iterator();
	            while(itText.hasNext()){
	                Element textEle = (Element) itText.next();
	                //name节点的文本内容修改为"张三"
	                textEle.setText("张三");
	            }
	            //查找emp节点
	            List<Object> listEle = doc.selectNodes("/emps/emp");
	            Iterator<Object> itEle = listEle.iterator();
	            while(itEle.hasNext()){
	                Element empEle = (Element) itEle.next();
	                //查找emp下的sex节点
	                Iterator<Object> 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();
	        }
	 }
	public static void main(String[] args) {
		new Dom4jDemo().updateXML();

	}
}

 

相关标签: XML IE F# SUN