您的位置:首页 > 编程语言 > Java开发

java解析XML性能对比

2009-09-29 15:04 330 查看
解析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)+ "毫秒");  

    }  

}  

二、MyXMLReaderJDOM
 

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)+ "毫秒");  

    }  

}  

三、MyXMLReaderDOM4J
 

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息