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

SAP 屏幕增强:客户商主数据屏幕增强(KNA1、KNB1、KNVV)

本文介绍了SAP系统中针对客户主数据(KNA1、KNB1、KNVV)进行屏幕增强的具体实现方法。主要内容包括:1)在SPRO配置中创建新条目;2)通过SE80创建函数组和程序(LZKNA1TOP等);3)设置子屏幕9001并添加自定义结构字段;4)利用BADI(CUSTOMER_ADD_DATA等)实现数据交互逻辑。文章分别详细说明了针对客户主数据的一般数据(KNA1)、公司代码数据(KNB1)和销售数据(KNVV)三类不同数据的增强配置步骤,包括函数模块创建、屏幕设置和BADI方法调用等关键技术点。

SAP ABAP开发技能记录分享 1616

STM32N6实战:FSBL引导XIP运行ThreadX与NetX Duo

在嵌入式系统开发中,程序的存储与执行方式直接影响启动速度和系统实时性。传统MCU常将代码拷贝到内存运行,而高主频处理器则可通过XIP(片外Flash原地执行)技术直接从外部存储取指,省去拷贝过程。但XIP的前提是外部存储器控制器需在上电后第一时间完成初始化,这正是FSBL(第一级引导程序)的核心职责。FSBL负责配置时钟与外部Flash,并将控制权移交给应用。而要让设备具备实时调度与网络能力,可搭配ThreadX实时内核和NetX Duo双协议栈,两者在CubeMX中原生集成,形成一套高性能MCU+外部存储

weixin_29191669的博客 319

Dom4j处理超大XML文件文件

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

jim20100728的博客 3750

Manimgl 进阶笔记

目录 一、调整视频输出的纵横比 二、调整预览窗口的尺寸 三、在开发工具中直接调试 一、调整视频输出的纵横比 调整输出视频的纵横比,在日常开发中属于比较基本的需求。要使用 Manimgl 得到期望的分辨率的视频输出需要修改以下几个地方: 第一步:在 custom_config.yml 配置文件中通过 camera_qualities设置视频的输出分辨率。manimlib 框架已经在 default_config.yml 文件中设置了四种视频输出分辨率,default_qualities 参数.

gunnery的专栏 2857

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

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

2301_76890677的博客 2409

王爽《汇编语言》课程设计2(不涉及软盘版本)

assume cs:code,ds:data,ss:stack stack segment db 128 dup (0) stack ends data segment db 256 dup (0) data ends code segment start: mov ax,stack mov ss,ax mov sp,128 ...

weixin_41944412的博客 1178

VC Spyglass调试秘籍:从Lint报错到代码修复的完整工作流

本文详细介绍了VC Spyglass调试的完整工作流,重点解析了如何高效定位和修复Lint检查中常见的XMRE-L跨模块引用错误。通过对比GUI与命令行(vc_static_shell)双模式调试技巧,并结合TCL脚本实现批量处理与规则豁免,帮助数字设计工程师系统化地提升代码调试效率与质量。

weixin_29246195的博客 576

使用Dom4j解析XML文件

使用Dom4j解析XML文件

junR_980218的博客 5652

手机VPN的连接方法分享

6、返回到VPN页面,可以看到刚刚新添加的VPN,点击开启VPN后面的开关。5、在打开的添加VPN的页面中输入VPN的信息后点击右上角的“保存”按钮。7、待VPN开关开启后,可以看到添加的VPN正在连接的提示信息了。2、在打开的小米手机设置页面中点击“更多连接方式”的菜单项。3、然后在打开的更多连接方式页面中点击VPN的菜单项。4、在打开的VPN设置页面中点击“添加VPN”的按钮。1、首先在手机屏幕左右的滑动,找到手机的设置图标。

惠惠软件 3万+

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

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

RudolphLiu的博客 2212

Ego Planner规划算法(下)——Ego Planner程序框架

本系列文章用于学习记录Ego-Planner规划算法的相关内容,本系列文章是在在Fast Planner规划算法系列文章的基础上,展开对Ego Planner的相关介绍,主要包括Ego Planner算法流程和程序框架两部分,主要学习资料是深蓝学院的移动机器人运动规划课程

慕羽★的博客 7259

52、切换线性动态系统:原理、挑战与高斯和滤波解决方案

本文介绍了切换线性动态系统(SLDS)的基本原理及其在复杂时间序列建模中的应用。SLDS结合了隐马尔可夫模型的离散状态切换与线性动态系统的连续状态演化,适用于系统动态发生跳跃的场景,如化工过程监测和金融市场分析。由于精确推理在计算上不可行,文章重点阐述了高斯和滤波这一近似方法,通过有限高斯混合来逼近后验分布,并详细描述了其递归更新、权重计算与组件合并流程。同时讨论了性能评估、优化策略及常见问题的解决方案,并展望了SLDS与深度学习、在线学习和多模态融合的未来发展方向。

algae的博客 161

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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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、付费专栏及课程。

余额充值