解析XML可能是我们在开发中经常要面临的问题,这里我们只谈Java,而且只涉及三个工具dom,jdom,dom4j,主要代码来自己网络,稍做整理,以备日后使用。
关于他们各自的概念,就不必多说了,Google一下,就OK了。
据我测试的结果,初步的结论是:
· 如果是解析结构非常简单,而且文件体积特别小的XML,推荐使用DOM;
· 结构相对比较复杂,文件体积较大的,推荐使用JDOM;
· 结构特别复杂,体积庞大(比如,超过2M),推荐使用DOM4J;
· 简单的说DOM4J效率高是片面的。
以下是代码:
一、MyXMLReaderDOM
ActionScript/Java代码
- package test;
- import java.io.*;
- import org.w3c.dom.*;
- import javax.xml.parsers.*;
- public class MyXMLReaderDOM {
- public static void main(String arge[]) {
- long lasting = System.currentTimeMillis();
- try {
- File f = new File("test.xml");
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder = factory.newDocumentBuilder();
- Document doc = builder.parse(f);
- NodeList nl = doc.getElementsByTagName("VALUE");
- for (int i = 0; i < nl.getLength(); i++) {
- System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());
- System.out.println("-车主地址:"+ doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- System.out.println("运行时间:" + (System.currentTimeMillis() - lasting)+ "毫秒");
- }
- }
ActionScript/Java代码
- package test;
- import java.io.*;
- import java.util.*;
- import org.jdom.*;
- import org.jdom.input.*;
- public class MyXMLReaderJDOM {
- @SuppressWarnings({"unchecked"})
- public static void main(String arge[]) {
- long lasting = System.currentTimeMillis();
- try {
- SAXBuilder builder = new SAXBuilder();
- Document doc = builder.build(new File("test.xml"));
- Element foo = doc.getRootElement();
- List allChildren = foo.getChildren();
- for (int i = 0; i < allChildren.size(); i++) {
- System.out.print("车牌号码:"+ ((Element) allChildren.get(i)).getChild("NO").getText());
- System.out.println("-车主地址:"+ ((Element) allChildren.get(i)).getChild("ADDR").getText());
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- System.out.println("运行时间:" + (System.currentTimeMillis() - lasting)+ "毫秒");
- }
- }
ActionScript/Java代码
- package test;
- import java.io.*;
- import java.util.*;
- import org.dom4j.*;
- import org.dom4j.io.*;
- public class MyXMLReaderDOM4J {
- @SuppressWarnings({"unchecked"})
- public static void main(String arge[]) {
- long lasting = System.currentTimeMillis();
- try {
- File f = new File("test.xml");
- SAXReader reader = new SAXReader();
- Document doc = reader.read(f);
- Element root = doc.getRootElement();
- Element foo;
- for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) {
- foo = (Element) i.next();
- System.out.print("车牌号码:" + foo.elementText("NO"));
- System.out.println("车主地址:" + foo.elementText("ADDR"));
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");
- }
- }
文件大小:2.85 MB
运行时间:52859毫秒 //dom4j
运行时间:3250毫秒 //jdom
运行时间:不敢尝试 //dom