`
longgangbai
  • 浏览: 7330760 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

针对项目中XML解析的扩展应用

阅读更多

    由于项目中多个需要xml解析东东,关于xml解析的效率以及性能等方面的问题,这里就不再说了,据说性能比较好的SAXReader和XStream等,我们在项目中采用SAXReader解析。

 

首先要说一说连接池原理:

  对数据库连接资源的低效管理。我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。

 

该模式正是为了解决资源的频繁分配?释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。

 

  预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量?使用情况,为系统开发?测试及性能调整提供依据。

SAXReader的缓冲池的实现过程如下:

 

在项目中创建一个FastSAXReader的类,创建一个SAXReader解析的连接池对象在类的静态语句块中初始化一定数量的SAXReader对象将之放在一个集合中在使用时获取,使用完毕释放(类似缓冲池原理但是不是缓冲池原理,它没有在SAXReader没有或不足时的堆栈监控状态的东东)。

 

常用一个文件装换Document对象的方法:

 public static Document loadXml(InputStream inputStream, EntityResolver entityResolver) {
   //FastSAXReader类似连接池的东东

SAXReader saxReader = FastSAXReader.getReader();
  if (entityResolver != null) {
   saxReader.setEntityResolver(entityResolver);
  }
  Document doc = null;
  try {
   InputStreamReader ir = new InputStreamReader(inputStream, "UTF-8");
   doc = saxReader.read(ir);
  } catch (Exception e) {
   ReflectionUtils.rethrowRuntimeException(e);
  }  finally {
   if (entityResolver != null) {
    saxReader.setEntityResolver(null);
   }
   FastSAXReader.release(saxReader);
  }
  return doc;
 }

分享到:
评论
2 楼 longgangbai 2010-05-20  
zli.ray 写道
我们一个项目也要使用到SAXReader,由于不确定SAXReader的read方法是不是线程安全的,因此不敢使用单例。但是,每次解析xml时都创建一个SAXReader的话,感觉有点不合适,因此想对SAXReader进行池化。正好lz也这么做过,不知对于性能有多大的提高那?因为我这边测试发现,跟每次new一个SAXReader相比,几乎没有向能提高。并且担心,多线程下,维护对象池的开销会很大。



    首先想告诉你一下,SAXReader如果多次创建可能消耗大量的内存。同样如果采用连接池的技术那么在首次加载SAXReader的资源池池时也是要消耗大量的内存。一个项目是否采用SAXReader的资源池技术取决于项目中解析xml的频繁度和解析文件多少决定。如果项目解析的文件比较少,那么可以解析一次缓存一下,以后需要时从缓存中取出即可。所以这个还是要看自己的项目的需求的。纯属个人见解,希望大家交流。
1 楼 zli.ray 2010-05-20  
我们一个项目也要使用到SAXReader,由于不确定SAXReader的read方法是不是线程安全的,因此不敢使用单例。但是,每次解析xml时都创建一个SAXReader的话,感觉有点不合适,因此想对SAXReader进行池化。正好lz也这么做过,不知对于性能有多大的提高那?因为我这边测试发现,跟每次new一个SAXReader相比,几乎没有向能提高。并且担心,多线程下,维护对象池的开销会很大。

相关推荐

    xml 解析源代码和应用

    在这个项目中,开发者可能创建了一个用户界面,通过按钮或其他控件触发XML解析操作,展示如何在实际应用中使用XML解析器。 `WindowsFormsApplication1`可能是项目的主程序文件,通常为`.cs`后缀,其中包含了程序的...

    XMLParser(XML解析代码 C++版)

    总结来说,XMLParser是针对C++开发的XML解析工具,可能是基于TinyXML库实现,提供了易于使用的API来读取、修改和保存XML文档。它适用于需要处理XML数据的各类应用场景,尤其适合那些对解析器大小和复杂性有严格限制...

    xml解析工具

    使用这样的XML解析库,开发者可以方便地在C++应用程序中读取XML配置文件、序列化对象为XML格式、交换网络数据等。通过深入理解XML解析的基本原理和 SlimXml 库的特性,开发者能够更有效地处理XML数据,提高程序的可...

    简易XML解析器

    简易XML解析器是针对XML文档进行读取、解析和操作的工具,通常用于处理XML数据并将其转换为程序可理解的形式。 在提供的文件中,我们可以看到以下几个关键组成部分: 1. **xCfgParser.cpp**:这是解析器的主要实现...

    java 解析xml 多级

    在企业级应用开发中,XML(可扩展标记语言)经常被用作数据交换格式,尤其在集成不同系统或服务时。Java作为一种广泛使用的后端编程语言,提供了多种方式来解析XML文档,使得处理多级嵌套的数据变得可能。本文将详细...

    XML.rar_XML phone_XML 解析

    4. 使用轻量级解析库:针对移动设备性能限制,选择性能优秀的XML解析库,如Android的Pull解析器。 六、实际应用案例 以Android为例,使用XML解析XML文件时,可以利用内置的`org.xmlpull.v1.XmlPullParser`进行SAX...

    xml可扩展的标记语言使用简介

    ### XML可扩展的标记语言使用简介...XML的强大之处在于它的灵活性和可扩展性,使其成为数据交换、配置文件管理等多种应用场景的理想选择。随着Web技术的发展,XML的应用范围也在不断扩大,成为连接不同系统的重要桥梁。

    IOS应用源码Demo-对xml文件的解析与导出数据存储在xml中(代码)xmlparser-毕设学习.zip

    该压缩包文件“IOS应用源码Demo-对xml文件的解析与导出数据存储在xml中(代码)xmlparser-毕设学习.zip”是针对iOS平台的一个应用源码示例,特别适合那些正在进行毕业设计或者想要深入理解XML解析的iOS开发者。...

    XML报文解析工具

    在实际应用中,这个XML解析工具可能用于以下场景: - **配置文件管理**:在嵌入式系统中,XML常用来存储设备配置信息,如网络设置、传感器参数等。解析工具可以读取XML配置文件,使设备按需初始化或动态调整状态。 ...

    kai 开源 xml 解析kai 开源 xml 解析

    在实际应用中,Kai开源XML解析库可以用于以下场景: 1. **数据交换**:在服务器与客户端之间,或是不同系统之间进行数据传输时,XML常被用作标准化的数据格式,Kai库可以帮助解析这些数据。 2. **配置文件处理**:...

    XML.rar_delphi xml文件_delphi解析xml_xml中listpack

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它以其结构化、自解释性和可扩展性而被...通过学习这些材料,开发者可以更好地理解和掌握Delphi中的XML解析技巧,从而在实际项目中灵活运用。

    xml的几种解析

    XOM(eXtremely Optimized Object Model)是一个针对XML解析的高性能库,旨在解决DOM和SAX的一些问题。它提供了一种类型安全且易于使用的API,同时也考虑了性能和内存效率。 6. DOM4J DOM4J是一个Java的XML API,它...

    基本的Web技术--XML及其应用

    - XQuery:用于查询XML数据的语言,类似于SQL但针对XML。 5. XML在中国 在中国,XML被广泛应用于各种行业和领域,包括政府、金融、教育和科技等。许多企业使用XML来实现内部数据的标准化管理和跨部门的信息共享。...

    省份城市xml解析js代码

    XML(Extensible Markup Language)是一种数据交换格式,常用于存储结构化数据,如地理、组织结构等信息。在JavaScript中,我们通常使用DOM...在实际应用中,可以进一步优化和扩展,以适应更复杂的XML结构和业务需求。

    解析XML的程序,可以读取节点属性。

    XML(eXtensible Markup Language)是一种用于存储和传输...综上所述,XML解析是软件开发中的重要技能,理解和掌握不同解析方式及其应用是必要的。本程序提供了基础的XML节点属性读取功能,可作为进一步开发的基础。

    使用WebService的方法返回xml格式的数据

    8. **显示XML数据**:在客户端,可以使用XML解析库(如jQuery的$.parseXML())或者原生的DOM API来解析XML,然后将其格式化并显示在用户界面中。 9. **示例代码**: - 使用Java的JAX-WS创建WebService,可以定义一...

    IOS的进行xml解析和json解析要用的一个很好的类库

    除了AFNetworking的扩展库,还有许多其他优秀的第三方库,如"KissXML"(一个强大的XML解析库)、"JSONModel"(用于JSON到模型的快速映射)和"SwiftyJSON"(提供Swift的JSON处理API)等,它们各自具有不同的优势和...

    symbian XML解析工具(压缩包)

    本压缩包提供的"SyExpat"工具就是针对Symbian平台的一个XML解析库。 SyExpat是Symbian版的Expat库,Expat是一个开源的、轻量级的XML解析器,主要由C语言编写。它不支持XML的DOM(Document Object Model)或SAX...

Global site tag (gtag.js) - Google Analytics