dom4j 读大xml文件

dom4j读取大文件的缓存方式 此代码通过dom4j提供的分步读取大文件的接口实现,可完成对大文件的读取,不至于程序报内存不足等错误。 立即下载

今天由于项目需要,读取一个几百兆的xml文件,直接内存溢出了,主要原因是我一次性读取xml文件的内容造成的,对于大的xml文件还是要读取部分到内存,然后从内存删除,再读取,这里用了dom4j的saxreader


[java]  view plain copy
  1. package test;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.InputStream;  
  6. import java.sql.Connection;  
  7. import java.sql.DriverManager;  
  8. import java.sql.PreparedStatement;  
  9. import java.sql.SQLException;  
  10. import java.text.DateFormat;  
  11. import java.text.SimpleDateFormat;  
  12. import java.util.Date;  
  13.   
  14. import org.apache.commons.codec.binary.Base64;  
  15. import org.dom4j.Element;  
  16. import org.dom4j.ElementHandler;  
  17. import org.dom4j.ElementPath;  
  18. import org.dom4j.io.SAXReader;  
  19.   
  20. public class MySaxHandler implements ElementHandler {  
  21.       
  22.     SAXReader reader;  
  23.       
  24.     static String jdbcURL = "jdbc:sybase:Tds:172.25.130.1:4100/center?charset=cp936";  
  25.     static String jdbcDriver = "com.sybase.jdbc3.jdbc.SybDriver";  
  26.     static String userName = "xxx";  
  27.     static String password = "xxx";  
  28.       
  29.     ThreeYearBlackEnt threeYearBlackEnt = new ThreeYearBlackEnt();  
  30.     public static Connection con = null;  
  31.       
  32.     public static Connection getConnection() throws Exception {  
  33.         Class.forName(jdbcDriver);  
  34.         return DriverManager.getConnection(jdbcURL, userName, password);  
  35.     }  
  36.     public static java.sql.Date stringToDate(String str) {  
  37.         DateFormat format = new SimpleDateFormat("yyyy-MM-dd");  
  38.         Date date = null;  
  39.         try {  
  40.             // Fri Feb 24 00:00:00 CST 2012  
  41.             date = format.parse(str);  
  42.         } catch (Exception e) {  
  43.             e.printStackTrace();  
  44.         }  
  45.         // 2012-02-24  
  46.         //date = java.sql.Date.valueOf(str);  
  47.                                                
  48.         return java.sql.Date.valueOf(str);  
  49.     }  
  50.     public static void addDataBackEnt(Connection con,ThreeYearBlackEnt threeYearBlackEnt) throws SQLException{  
  51.         String sql = "insert into J_QYDXB_QG    (QYMC, ZCH,REGORG, FDDBR,FDDBR_ZJHM,FDDBR_ZJMC,DXRQ,BZSM)   values(?, ?, ?, ?, ?,?,?,?)";  
  52.         PreparedStatement pst = con.prepareStatement(sql);  
  53.           
  54.         pst.setString(1, threeYearBlackEnt.ENTNAME);  
  55.         pst.setString(2, threeYearBlackEnt.REGNO);  
  56.         pst.setString(3, threeYearBlackEnt.REGORG);  
  57.         pst.setString(4, threeYearBlackEnt.NAME);  
  58.         pst.setString(5, threeYearBlackEnt.CERNO);  
  59.         pst.setString(6, threeYearBlackEnt.CERTYPE);  
  60.         pst.setDate(7,  stringToDate(threeYearBlackEnt.REVDATE));  
  61.         pst.setString(8, threeYearBlackEnt.ILLEGACT);  
  62.           
  63.         pst.execute();  
  64.         pst.close();  
  65.     }  
  66.       
  67.     public MySaxHandler() {  
  68.         // test.xml文件跟类放在同一目录下  
  69.         try {  
  70.             con = getConnection();  
  71.             InputStream is = MySaxHandler.class.getResourceAsStream("threeYearBlackEnt_data.xml");   
  72.             //InputStream is = new FileInputStream("D:\\programfiles\\workspace\\Counter\\threeYearBlackEnt_data1.xml");  
  73.             reader = new SAXReader();  
  74.             reader.setDefaultHandler(this);  
  75.             reader.read(is);  
  76.         } catch (Exception e) {  
  77.             e.printStackTrace();  
  78.         }  
  79.     }  
  80.     public void onEnd(ElementPath ep) {  
  81.         Element element = ep.getCurrent(); //获得当前节点  
  82.         if(element.getName().equals("ENTNAME")) {  
  83.             threeYearBlackEnt.ENTNAME = new String(Base64.decodeBase64(element.getText()));  
  84.             p("ENTNAME="+ threeYearBlackEnt.ENTNAME );  
  85.               
  86.         }else if(element.getName().equals("REGNO")) {  
  87.             threeYearBlackEnt.REGNO = new String(Base64.decodeBase64(element.getText()));  
  88.             p("REGNO="+ threeYearBlackEnt.REGNO);  
  89.               
  90.         }else if(element.getName().equals("REGORG")) {  
  91.             threeYearBlackEnt.REGORG = new String(Base64.decodeBase64(element.getText()));  
  92.             p("REGORG="+ threeYearBlackEnt.REGORG);  
  93.         }else if(element.equals("NAME")) {  
  94.             threeYearBlackEnt.NAME = new String(Base64.decodeBase64(element.getText()));  
  95.             p("NAME="+ threeYearBlackEnt.NAME);  
  96.         }else if(element.getClass().equals("CERNO")) {  
  97.             threeYearBlackEnt.CERNO = new String(Base64.decodeBase64(element.getText()));  
  98.             p("CERNO="+ threeYearBlackEnt.CERNO);  
  99.               
  100.         }else if(element.getName().equals("CERTYPE")){  
  101.             threeYearBlackEnt.CERTYPE = new String(Base64.decodeBase64(element.getText()));  
  102.             p("CERTYPE="+ threeYearBlackEnt.CERTYPE);  
  103.               
  104.         }else if(element.getName().equals("REVDATE")) {  
  105.             threeYearBlackEnt.REVDATE = new String(Base64.decodeBase64(element.getText()));  
  106.             p("REVDATE="+ threeYearBlackEnt.REVDATE);  
  107.               
  108.         }else if(element.getName().equals("ILLEGACT")) {  
  109.             threeYearBlackEnt.ILLEGACT =new String(Base64.decodeBase64(element.getText()));  
  110.             p("ILLEGACT="+ threeYearBlackEnt.ILLEGACT);  
  111.               
  112.             try {  
  113.                 addDataBackEnt(con, threeYearBlackEnt);  
  114.             } catch (SQLException e) {  
  115.                 // TODO Auto-generated catch block  
  116.                 e.printStackTrace();  
  117.             }  
  118.         }  
  119.           
  120.           
  121.           
  122.         element.detach(); //记得从内存中移去  
  123.     }  
  124.   
  125.     public void onStart(ElementPath ep) {  
  126.     }  
  127.       
  128.     public static void main(String[] args){  
  129.         new MySaxHandler();  
  130.     }  
  131.       
  132.     public static void p(Object o) {  
  133.         if(o != null) System.out.println(o.toString());  
  134.     }  
  135.   
  136. }  
dom4j 解析 大 文件 这个例子我测试超过50多万条数据,用的是dom4j + Xpath 的解析,不错哦!不如你看看! 立即下载

相关推荐

读写超大类xml文件,使用dom4j读写xml文件的工具类

基于dom4j的读写xml文件的工具包。封装了dom4j操作xml文档的常和方法。 支持两种读写方法。1:针对小文件的读取整个文档,2:针对大文件的,逐行读取。读到几百M文件毫无压力。

dom4j处理超大XML

英文原文 : http://dom4j.sourceforge.net/dom4j-1.6.1/faq.html#large-doc dom4j提供了基于事件的模型来操作xml文档。利用该模型开发人员可以一部分、一部分的处理XML文档,而不需要将整个XML文档都加载到内存中。例如:假想你要处理一个非常大的XML文档,它可能是由数据库的某张数据表而来的。如下所示: ... ...

laravel framework 422

dom4j基于事件流解析大XML的文件 示例

解决普通方法解析大xml的文件时,内存严重不足。

DOM4J解析大数据的方案

dom4j本身提供了两种解析xml的方式:dom解析和sax解析。关于dom解析和sax解析各自的优缺点这里不再多述,只强调的一点是由于越来越多的应用会遇到大数据场景,SAX解析方式刚好是解决此类场景的完美方案,因此“DOM4J解析大数据的方案”就是"如何利用SAX方式解析大数据的方案"(当然JAXP中的sax解析也是同样的方案),本文梳理总结下实际工作中使用DOM4J解析大容量XML文件的实现。

warhin的专栏 6161

使用广播星历进行 GPS 卫星位置的计算

目录1.计算卫星运动的平均角速度 n2.计算观测瞬间卫星的近地点角3.计算偏近点角4.计算真近点角 f5.计算升交角距 6.计算摄动改正项7.进行摄动改正 8.计算卫星在轨道面坐标系中的位置9.计算观测瞬间升交点的经度 L10.计算卫星在瞬时地球坐标系中的位置11.计算卫星在协议地球坐标系中的位置使用广播星历进行GPS卫星位置的计算的详细步骤如下:关于在广播星历中各参数的分布情况可以参考下图:首先根据广播星历中给出的参数 计算参考时刻(TOE) 的平均角速度 式中,GM为万有引力常数 G 与地球总质量

qq_43381998的博客 5568

告别TwinCAT:手把手教你用IgH EtherCAT Master在LinuxCNC上搭建实时运动控制平台

本文详细介绍了如何利用IgH EtherCAT Master和LinuxCNC搭建开源实时运动控制平台,替代商业软件TwinCAT。通过分步指南,包括实时Linux环境配置、EtherCAT主站安装、LinuxCNC集成及多轴同步控制实现,帮助开发者构建高性能、低成本的工业自动化解决方案。

weixin_42641741的博客 401

Dom4j处理超大XML文件文件

源码:https://github.com/jimzhou2015/dom4j-big-xml相关原理:     边读取部分文件内容,匹配,处理匹配内容,缓存后面不匹配内容,再继续读取文件,不匹配内容+这次内容匹配,继续相同处理,直到文件处理完成。...

jim20100728的博客 3750

展会客流统计的客流统计系统,WiFi客流每时每客

一般展会的举行时间都在3-7天之间,展会作为市场部门一项重要工作,一直以来没有一项有效的工具能够提供数据支持。 展会最重要的是通过活动和产品来吸引参展者的参观,如何统计展会期间的客流量呢?如何通过将数据转化成为活动数据的支撑呢? 目前成熟的解决方案有,视频客流统计、WiFi客流统计、红外线客流统计等方式。由于展会通常的时间都比较短,视频、红外线客流统计采购及安装价格都比较高,需

isentech的博客 3994

Java--dom4j解析xml、读取xml文件

Dom4j是一个开源的 XML 解析框架,它基于 Java 的sax 解析器和jaxp 解析器开发,提供了灵活简便、性能优良、扩展性强的 XML 解析和生成功能。Dom4J通过SAXReader对象加载并解析xml文件,把它转换为内存中的Document对象,接着对Document对象中的元素进行添加、更新和删除操作,并且通过XMLWriter对象把修改后的Document对象保存到xml文件中。

2301_76890677的博客 2409

stm32F103定时器使用方法

文章目录1、STM32的Timer简介2、普通定时器TIM2-TIM52.1 时钟来源2.2 计数器模式2.3 编程步骤3、程序源代码4、总结 1、STM32的Timer简介 STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。今天主要是研究剩下的8个定时器。 其中TIM1和TIM8是能够产生3对PWM互补输出的高级登时其,常用于三相电机的驱动,时钟

weixin_43582209的博客 4515

如何获取不同分区模板的基因表达矩阵,abagen: Allen 大脑图谱遗传数据工具箱的使用笔记

基因表达从根本上塑造了人类大脑的结构和功能结构。像Allen人脑图谱这样的开放获取转录组数据集提供了前所未有的能力来检查这些机制。abagen工具箱,这是一个用于处理转录组学数据的开放获取软件包,并使用它来检查方法可变性如何影响使用Allen人脑图谱的研究结果。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 3340

使用Dom4j解析XML文件

使用Dom4j解析XML文件

junR_980218的博客 5652

Pytorch实现EdgeCNN(基于PyTorch实现)

本专栏整理了《图神经网络代码实战》,内包含了不同图神经网络的相关代码实现(PyG以及自实现),理论与实践相结合,如GCN、GAT、GraphSAGE等经典图网络,每一个代码实例都附带有完整的代码。

优快云 精品推荐 1万+

【DOM4J】Java中使用 DOM4J解析XML文件,解析Mybatis Mapper xml文件思路。

/这里相当于进入了Select标签元素内部break;break;// 添加注释break;以上对整个XML做了一个遍历,第一个for循环是对xml总体做了一个遍历,而内部则是开始获取的内容,这里通过。

RudolphLiu的博客 2212

lammps模拟技巧:高熵合金势函数设置三种方法

大家好,我是小马老师。 本文继续介绍lammps模拟中的势函数设置方法。 在前面的文章中,介绍过高熵合金的建模:高熵合金建模 高熵合金包含的原子数较多,势函数的设置相对复杂,在平时一对一的咨询中,这种问题也相对较多。 下面介绍三种高熵合金势函数设置方法。 1.下载专用势函数 下面的网站包含了大多数原子的势函数: https://www.ctcms.nist.gov/potentials/ 如需下载包含Fe原子的势函数,直接点Fe: 出现势函数列表: 比如Al-Co-Cr-Fe-Ni就是高熵合金AlCoC

lammps_jiayou的博客 8962

SAP GUI 经典事务在 Fiori Launchpad 中的穿越之道:原理、配置与实践指南

在许多企业的 S/4HANA 或 ECC 系统里,经典 SAP GUI 事务依旧承载着关键业务。如何把这些老将自然地嵌入到 Fiori Launchpad,让用户在统一入口里无缝切换新旧 UI,是项目中经常遇到的主题。本文结合社区博文、官方文档与实际项目经验,系统梳理这一过程的技术原理、配置步骤、性能优化以及常见坑点,并给出贴近中国读者的案例解析与改进建议。阅读完毕,你将不仅知道怎么做,还会理解。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 623

Java解析XML文件(DOM4J解析xml文件)

实现通过DOM4J技术解析XML配置文件,修改xml配置信息,创建xml文件及信息。通过dom4j技术模拟解析web.xml文件的过程。

雾林小妖的博客 2833

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

xml文件解析 (DOM4J解析XML) -java

文章目录前言一、本地XML解析1、导包并配置1、在项目下新建lib文件夹,并把jar包导入。2、更改项目配置2、编写一个简单的本地XML文件3、解析本地XML文件:二、解析网络上的XML文件1.网址:2、来解析此网络XML文件总结 前言 今天,我们对xml文件进行解析。分别对本地的xml文件和网络上的xml文件进行解析。 提示:以下是本篇文章正文内容。 一、本地XML解析 1、导包并配置 1、在项目下新建lib文件夹,并把jar包导入。 2、更改项目配置 接下来 选中添加刚才创建的Libr

qq_43783709的博客 3371

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java实现——Dom4j读写XML文件

1. dom4j概述 解析DOM4J是一个开源XML解析包,采用了Java集合框架并完全支持DOM,SAX和JAXP。最大的特色是使用了大量的接口,主要接口都在org.dom4j里定义。 2. dom4j的使用 2.1Doucment相关用法 2.11 解析XML文件,获得Document对象 SAXReader reader = new SAXReader(); Docu......

关于Android开发的一些技术点总结 ╮( ̄▽ ̄”)╭ 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Dom4J读写XML

 dom4j读写xml文件 首先我们给出一段示例程序:import java.io.File;import java.io.FileWriter;import java.util.Iterator;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom

4246

XML 解析技术:DOM4j

Dom4j 是一个简单、灵活的开放源代码的库(用于解析/处理 XML 文件)。Dom4j 是由早期开发 JDOM 的人分离出来而后独立开发的。与 JDOM 不同的是,dom4j 使用接口和抽象基类,虽然 Dom4j 的 API 相对要复杂一些,但它提供了比 JDOM 更好的灵活性。

Baridhu的博客 2446

Dom4j解析XML

1.XML解析的方式介绍 在日常开发中常见的XML解析方式有如下两种:1.DOM解析 DOM解析要求解析器将整个XML文件全部加载到内存中,生成一个Document对象。 1.优点:元素和元素之间保留结构,关系,可以针对元素进行增删改查操作。 2.缺点:如果XML文件过大,可能会导致内存溢出。2.SAX解析 SAX解析是一种更加高效的解析方式。它是逐行扫描,边扫描边解析,并且以时间驱动的方式进行具体的解析,每解析一行都会触发一个事件。 1.优点:不会出现内存溢出的问题,可以处理大文件。 2.缺点:只能读,不

az44yao的专栏 2150

java dom4j 读xml文件_DOM4J读取XML文件

XML文件17891sdffffjob2013-1-15000.001000.0027369SMITHCLERK79022012-12-17800.0020下面是DOM4J读取XML文件的方式:1. SAXReader/***使用dom4j中saxreader获取Document容器,利用此容器的elementIterator读取xml文件*/publicstaticvoidreadX...

weixin_34892992的博客 519
上一篇: 经典开源C/C++项目
下一篇: Android 4.2源码下载(ubuntu 12.10)
Enbiting
博客等级 码龄18年 19粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值