(文字部分引用何处忘了。。。。)
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();
}
}