选择显示字体大小

java中四种xml解析技术之不完全测试


  在平时工作中,难免会遇到把 xml 作为数据存储格式。面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历 xml 这块来测试,因为遍历 xml 是工作中使用最多的(至少我认为)。

  预 备

  测试环境:

  amd 毒龙1.4g oc 1.5g、256m ddr333、windows2000 server sp4、sun jdk 1.4.1+eclipse 2.1+resin 2.1.8,在 debug 模式测试

  xml 文件格式如下:

<?xml version="1.0" encoding="gb2312"?>
<result>
 <value>
  <no>a1234</no>
  <addr>四川省xx县xx镇xx路x段xx号</addr>
 </value>
 <value>
  <no>b1234</no>
  <addr>四川省xx市xx乡xx村xx组</addr>
 </value>
</result>

  测试方法

  采用 jsp 端调用bean(至于为什么采用jsp来调用,请参考:http://blog.csdn.net/rosen/archive/2004/10/15/138324.aspx),让每一种方案分别解析10k、100k、1000k、10000k的 xml 文件,计算其消耗时间(单位:毫秒)。

  jsp 文件:

<%@ page contenttype="text/html; charset=gb2312" %>
<%@ page import="com.test.*"%>

html
<body>
<%
string args[]={""};
myxmlreader.main(args);
%>
</body>
</html

  测 试

  首先出场的是 dom(jaxp crimson 解析器)

  dom 是用与平台和语言无关的方式表示 xml 文档的官方 w3c 标准。dom 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而 dom 被认为是基于树或基于对象的。dom 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像 sax 那样是一次性的处理。dom 使用起来也要简单得多。

  另一方面,对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这样的数据会更好。这些基于事件的模型,比如 sax。

  bean文件:

package com.test;

import java.io.*;
import java.util.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;

public class myxmlreader{

 public static void main(string arge[]){
  long lasting =system.currenttimemillis();
  try{
   file f=new file("data_10k.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)+" 毫秒");
 }
}

  10k消耗时间:265 203 219 172
  100k消耗时间:9172 9016 8891 9000
  1000k消耗时间:691719 675407 708375 739656
  10000k消耗时间:outofmemoryerror

  接着是 sax

  这种处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,sax 还比它的替代者 dom 快许多。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons