热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Java中四种XML解析技巧之不完整测试

测试环境:AMD毒龙1.4GOC1.5G、256MDDR333、Windows2000ServerSP4、SunJDK1.4.1+Eclipse2.1+Resin2.1.8,在Debug模式下测试。XML文件格局如下:以下为引用的内容:?xmlversion=1.0encoding=GB

测试环境:

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文件格局如下:

以下为引用的内容:

  A1234

  四川省XX县XX镇XX路X段XX号

  B1234

  四川省XX市XX乡XX村XX组

测试方法:

让每一种计划分辨解析10K、100K、1000K、10000K的XML文件,盘算其耗费时间(单位:毫秒)。

以下为引用的内容:

JSP文件:

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

  <%String args[]={""};MyXMLReader.main(args);%>

测试

首先出场的是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

    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快很多。

选择DOM还是选择SAX?

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

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

DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的长处是编程轻易,开发职员只需要调用建树的指令,然后利用navigation APIs拜访所需的树节点来完成任务。可以很轻易的添加和修正树中的元素。然而由于应用DOM解析器的时候需要处理全部XML文档,所以对性能和内存的请求比拟高,尤其是碰到很大的XML文件的时候。由于它的遍历才能,DOM解析器常用于XML文档需要频繁的转变的服务中。

SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发明给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的请求通常会比拟低,由于它让开发职员自己来决定所要处理的tag。特别是当开发职员只需要处理文档中所包含的部分数据时,SAX这种扩大才能得到了更好的体现。但用SAX解析器的时候编码工作会比拟艰苦,而且很难同时拜访同一个文档中的多处不同数据。

以下为引用的内容:

Bean文件:

  package com.test;import org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;

  public class MyXMLReader extends DefaultHandler {

  java.util.Stack tags = new java.util.Stack();

  public MyXMLReader() {

  super();}

  public static void main(String args[]) {

  long lasting = System.currentTimeMillis();

  try {

   SAXParserFactory sf = SAXParserFactory.newInstance();

   SAXParser sp = sf.newSAXParser();

   MyXMLReader reader = new MyXMLReader();

   sp.parse(new InputSource("data_10k.xml"), reader);

  } catch (Exception e) {

   e.printStackTrace();

  }

  System.out.println("运行时间:" (System.currentTimeMillis() - lasting) "毫秒");}

  public void characters(char ch[], int start, int length) throws SAXException {

  String tag = (String) tags.peek();

  if (tag.equals("NO")) {

   System.out.print("车牌号码:" new String(ch, start, length));}if (tag.equals("ADDR")) {

  System.out.println("地址:" new String(ch, start, length));}}

  public void startElement(String uri,String localName,String qName,Attributes attrs) {

  tags.push(qName);}}

  10k耗费时间:110 47 109 78

  100k耗费时间:344 406 375 422

  1000k耗费时间:3234 3281 3688 3312


推荐阅读
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 本文探讨了在Windows Server 2008环境下配置Tomcat使用80端口时遇到的问题,包括端口被占用、多项目访问失败等,并提供详细的解决方法和配置建议。 ... [详细]
  • 创建项目:Visual Studio Online 入门指南
    本文介绍如何使用微软的 Visual Studio Online(VSO)创建和管理开发项目。作为一款基于云计算的开发平台,VSO 提供了丰富的工具和服务,简化了项目的配置和部署流程。 ... [详细]
  • 本文详细介绍超文本标记语言(HTML)的基本概念与语法结构。HTML是构建网页的核心语言,通过标记标签描述页面内容,帮助开发者创建结构化、语义化的Web页面。 ... [详细]
  • Git管理工具SourceTree安装与使用指南
    本文详细介绍了Git管理工具SourceTree的安装、配置及团队协作方案,旨在帮助开发者更高效地进行版本控制和项目管理。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • 深入理解ExtJS:从入门到精通
    本文详细介绍了ExtJS的功能及其在大型企业前端开发中的应用。通过实例和详细的文件结构解析,帮助初学者快速掌握ExtJS的核心概念,并提供实用技巧和最佳实践。 ... [详细]
  • 本文详细介绍了如何在Python3环境中配置Appium1.4.6,并指导如何连接模拟器进行自动化测试。通过本文,您将了解从环境搭建到模拟器连接的完整流程。 ... [详细]
  • Eclipse 中 JSP 开发环境配置指南
    本文详细介绍了如何在 Eclipse 集成开发环境中配置 JSP 运行环境,包括必要的软件下载、Tomcat 服务器的配置以及常见问题的解决方法。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 分享一个简化版的Silverlight链接图项目:Link Map Simplified
    本文介绍了一个使用Silverlight开发的可视化工具,主要用于展示和操作复杂的实体关系图(Graph)。该工具在犯罪调查系统中得到了广泛应用,帮助用户直观地获取和理解相关信息。 ... [详细]
  • 探讨如何从数据库中按分组获取最大N条记录的方法,并分享新年祝福。本文提供多种解决方案,适用于不同数据库系统,如MySQL、Oracle等。 ... [详细]
author-avatar
被抛弃的微博名
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有