Java中四种XML解析技术

2016-01-29 12:54 16 1 收藏

Java中四种XML解析技术,Java中四种XML解析技术

【 tulaoshi.com - Java 】

  在平时工作中,难免会遇到把 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 快许多。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/java/)

   选择 DOM 还是选择 SAX ?

  对于需要自己编写代码来处理 XML 文档的开发人员来说,选择 DOM 还是 SAX 解析模型是一个非常重要的设计决策。

  DOM 采用建立树形结构的方式访问 XML 文档,而 SAX 采用的事件模型。

  DOM 解析器把 XML 文档转化为一个包含其内容的树,并可以对树进行遍历。用 DOM 解析模型的优点是编程容易,开发人员只需要调用建树的

来源:https://www.tulaoshi.com/n/20160129/1488014.html

延伸阅读
饮食调理是预防和治疗感冒的重要方法,以下是医生针对“阴虚”宝宝、“气虚”宝宝、“寒性感冒”宝宝、“热性感冒”宝宝制定的调理食谱。 点击图片进入下一页>> 感冒食谱:四种感冒,四种食谱调理 1、 “阴虚”宝宝食谱 百合枸杞猪肉粥 阴虚的宝宝一般...
标签: 饮食养生
感冒分为狭义和广义之分,狭义上指普通感冒,是一种轻微的上呼吸道(鼻及喉部)病毒性感染。广义上还包括流行性感冒,一般比普通感冒更严重,额外的症状包括发热、冷颤及肌肉酸痛,全身性症状较明显。 普通感冒又称急性鼻咽炎,简称感冒,俗称“伤风”,是急性上呼吸道病毒感染中最常见病种,多呈自限性,但发生率高,影响人群...
标签: 宝宝 健康 小孩
宝宝四种舌苔反映四种健康状况 中医专家教您辨宝宝的舌苔,为宝宝制定出专属饮食计划。 ■症状一 舌苔少 舌头发红 正常健康宝宝的舌体应该是大小适中、舌体柔软、淡红润泽、伸缩活动自如、说话口齿清楚,而且舌面有干湿适中淡淡的薄苔,口中没有气味。一旦宝贝患了病,舌质和舌苔就会相应的发生变化。...
先简单说下前三种方式: DOM方式 :个人理解类似.net的XmlDocument,解析的时候效率不高,占用内存,不适合大XML的解析; SAX方式 :基于事件的解析,当解析到xml的某个部分的时候,会触发特定事件,可以在自定义的解析类中定义当事件触发时要做得事情;个人感觉一种很另类的方式,不知道.Net体系下是否有没有类似的方式? StAX方式 :个人...
标签: SQLServer
  一."SQL   Server   不存在或访问被拒绝"         这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多.         一般说来,有以下几种可能性:         1,SQL   Server名称或IP地址...

经验教程

54

收藏

94
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部