[xml]DOM4j解析

        (文字部分引用何处忘了。。。。)

     JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。


    JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码。

     DOM4j是JDOM的一个分支

    合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能

     为支持所有这些功能,DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性

    对比

   1)DOM4J性能最好,如果不考虑可移植性,那就采用DOM4J.

   2)JDOM和DOM在性能测试时表现不佳,在测试10M文档时内存溢出。在小文档情况下还值得考虑使用DOM和JDOM.,DOM仍是一个非常好的选择。DOM实现广泛应用于多种编程语言。它还是许多其它与XML相关的标准的基础,因为它正式获得W3C推荐(与基于非标准的Java模型相对),所以在某些类型的项目中可能也需要它(如在JavaScript中使用DOM)。

    3)SAX表现较好,这要依赖于它特定的解析方式-事件驱动。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。


<pre name="code" class="java">package com.cskaoyan.dom4j;
import java.io.FileOutputStream;
import java.io.FileWriter;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Dom4jDeom {
  

public static void main(String[] args) throws Exception{
	  
	  /* SAXReader reader= new SAXReader();
	   Document document= reader.read("src/books.xml");//读取xml并获得document
	   
	   Element root= document.getRootElement();//根节点
	   
	   Element book1= (Element)root.elements().get(1);//对应结点
	   Element price= (Element)book1.element("author");
	   
	   System.out.println(price.getText());
	   
	   book1.remove(price);//删除 需要回写
	   
	   OutputFormat format= OutputFormat.createPrettyPrint();//指定格式  这是英文有中文的原因
	   format.setEncoding("utf-8");

       XMLWriter writer= new XMLWriter(new FileOutputStream("src/books.xml"),format);	  
       writer.write(document); 
	   writer.close(); //回写 */
	    
	    
//	    SAXReader reader = new SAXReader();
//      Document document = reader.read("src/books.xml");
//      Element root = document.getRootElement();
//      Element book1 =   (Element) root.elements().get(1);
//      Element author =  book1.addElement("author");
//      author.setText("李开复"); //添加 需要回写
//        
//      OutputFormat format= OutputFormat.createPrettyPrint();
// 	    format.setEncoding("utf-8");
//      XMLWriter writer= new XMLWriter(new FileOutputStream("src/books.xml"),format);	  
//      writer.write(document); 
//	    writer.close();
	    
	    
	    SAXReader reader = new SAXReader();
        Document document = reader.read("src/books.xml");
	    Element root = document.getRootElement();
	    Element book1 =   (Element) root.elements().get(0);
        Element author =   (Element) book1.element("author");
        author.setText("李开复");
        
        OutputFormat format = OutputFormat.createPrettyPrint();// 指定XML编码                   
        format.setEncoding("utf-8"); 
        XMLWriter writer = new XMLWriter(new FileOutputStream ("src/books.xml"),format);
        writer.write(document); 
        writer.close();
        
  }    
	
}


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值