DOM、SAX、JDOM、DOM4J
JDOM 和 DOM 在性能测试时表现不佳,在测试 10M 文档时内存溢出。在小文档情况下还值得考虑使用 DOM 和 JDOM。虽然 JDOM 的开发者已经说明他们期望在正式发行版前专注性能问题,但是从性能观点来看,它确实没有值得推荐之处。另外,DOM 仍是一个非常好的选择。DOM 实现广泛应用于多种编程语言。它还是许多其它与 XML 相关的标准的基础,因为它正式获得 W3C 推荐(与基于非标准的 Java 模型相对),所以在某些类型的项目中可能也需要它(如在 javascript 中使用 DOM)。
SAX表现较好,这要依赖于它特定的解析方式。一个 SAX 检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。
无疑,DOM4J是最好的,目前许多开源项目中大量采用 DOM4J,例如大名鼎鼎的 Hibernate 也用 DOM4J 来读取 XML 配置文件。如果不考虑可移植性,那就采用DOM4J吧!
1、JDOM
xml 代码
- xml version="1.0" encoding="GB2312"?>
- <combos>
- </combos>
读取XML文件
java 代码
- File file = new File("combos.xml");
- SAXBuilder builder = new SAXBuilder();
- Document doc = null;
- try {
- doc = builder.build(file);
- } catch (JDOMException e) {
- System.out.println("read xml file failed!");
- System.out.println(e);
- } catch (IOException e) {
- e.printStackTrace();
- }
- //
- Element root = doc.getRootElement();
- List combos = root.getChildren();
- for (Iterator iter = combos.iterator(); iter.hasNext();) {
- Element combo = (Element) iter.next();
- Element comboNameTemp = combo.getChild("combo-name");
- }
写入数据
java 代码
- try {
- // 格式
- Format f = Format.getCompactFormat();
- f.setEncoding("GB2312");
- f.setExpandEmptyElements(true);
- f.setIndent(" ");
- Element root = doc.getRootElement();
- //
- Element combo = new Element("combo");
- Element comboName = new Element("combo-name").addContent("comb name");
- Element defult = new Element("defult").addContent("defult");
- combo.addContent(comboName);
- combo.addContent(defult);
- root.addContent(combo);
- XMLOutputter outputter = new XMLOutputter(f);
- outputter.getFormat();
- FileWriter writer = new FileWriter(file);
- outputter.output(doc, writer);
- writer.close();
- } catch (java.io.IOException e) {
- e.printStackTrace();
- }
参考: