设为首页收藏本站language 语言切换
查看: 1409|回复: 0
收起左侧

Java基础:Java中四种XML解析技术不完全评测

[复制链接]
发表于 2010-2-20 13:57:37 | 显示全部楼层 |阅读模式
<p >在平时工作中,难免会遇到把XML作为数据存储格式。面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历 XML 这块来测试,因为遍历 XML 是工作中使用最多的(至少我认为)。 <p ><b>预备</b><p ><b>测试环境:</b><p >XML文件格式如下: <p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code><?xml version=&quot;1.0&quot; encoding=&quot;GB2312&quot;?> <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></ccid_code></pre></td></tr></table></ccid_nobr><br><p >测试方法: <p ><p >采用JSP端调用Bean,让每一种方案分别解析10K、100K、1000K、10000K的 XML 文件,计算其消耗时间(单位:毫秒)。 <p ><p >JSP 文件: <p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code><%@ page contentType=&quot;text/html; charset=gb2312&quot; %> <%@ page import=&quot;com.test.*&quot;%> <html> <body> <% String args[]={&quot;&quot;}; MyXMLReader.main(args); %> </body> </html></ccid_code></pre></td></tr></table></ccid_nobr><br><p ><p >测 试 <p ><p >首先出场的是 DOM(JAXP Crimson 解析器) <p ><p >DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准。DOM 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的。DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理。DOM 使用起来也要简单得多。 <p ><p >另一方面,对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这样的数据会更好。这些基于事件的模型,比如 SAX。 <p ><p >Bean文件: <p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>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(&quot;data_10k.xml&quot;);  DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();  DocumentBuilder builder=factory.newDocumentBuilder();  Document doc = builder.parse(f);  NodeList nl = doc.getElementsByTagName(&quot;VALUE&quot;);  for (int i=0;i<nl.getLength();i++){ System.out.print(&quot;车牌号码:&quot; + doc.getElementsByTagName(&quot;NO&quot;)             .item(i).getFirstChild().getNodeValue()); System.out.println(&quot; 车主地址:&quot; + doc.getElementsByTagName(&quot;ADDR&quot;)             .item(i).getFirstChild().getNodeValue()); } }catch(Exception e){  e.printStackTrace(); } System.out.println(&quot;运行时间:&quot;+(System.currentTimeMillis() - lasting)+&quot; 毫秒&quot;); } }</ccid_code></pre></td></tr></table></ccid_nobr><br><p ><p >10k消耗时间:265 203 219 172 <p >100k消耗时间:9172 9016 8891 9000 <p >1000k消耗时间:691719 675407 708375 739656 <p >10000k消耗时间:OutOfMemoryError                                 <p align="center"><font color="FF0000" >1</font>234<span class="content01">下一页&gt;&gt;</span></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-9 02:02 , Processed in 0.072024 second(s), 23 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表