import xml.etree.ElementTree as ET

 def parse_res(xml_file):
res_dic = {}
tmp_lst_lev1 = []
tmp_lst_lev2 = []
add_flag = False
for event, elem in ET.iterparse(xml_file):
if event == 'end':
if elem.tag == 'Item':
tmp_lst_lev1.append(dict(elem.attrib))
elif elem.tag == 'Enum':
enum_str = ''.join([ ''.join(['[', item['value'], '=', item['name'], ']']) for item in tmp_lst_lev1])
res_enum = {}
res_enum['id'] = elem.attrib['id']
res_enum['name'] = enum_str
tmp_lst_lev2.append(res_enum)
tmp_lst_lev1 = []
elif elem.tag == 'EnumRes':
res_dic['EnumRes'] = {}
tmp_dic = res_dic['EnumRes']
for item in tmp_lst_lev2:
tmp_dic[ item['id'].split('.')[1] ] = item['name']
tmp_lst_lev2 = []
elif elem.tag == 'MeasUnitRes' or elem.tag == 'CounterNameRes' or elem.tag == 'CounterUnitRes':
res_dic[elem.tag] = {}
tmp_dic = res_dic[elem.tag]
for item in tmp_lst_lev1:
tmp_dic[ item['id'].split('.')[1] ] = item['name']
tmp_lst_lev1 = []
#CommonInfo.Resource.xml
elif elem.tag == 'DevTypeNameRes' or elem.tag == 'VendorRes' or elem.tag == 'MocRes':
res_dic[elem.tag] = {}
tmp_dic = res_dic[elem.tag]
for item in tmp_lst_lev1:
tmp_dic['id'] = item['id'].split('.')[1]
tmp_dic['name'] = item['name']
tmp_lst_lev1 = []
#StaticList.xml
elif elem.tag == 'param':
if 'alarmId' == elem.attrib['name']:
id = elem.text
elif elem.tag == 'alarm':
tmp_lst_lev1.append([id, elem.attrib['name']])
elif elem.tag == 'alarms':
res_dic[elem.tag] = {}
tmp_dic = res_dic[elem.tag]
for item in tmp_lst_lev1:
tmp_dic[ item[0] ] = item[1]
tmp_lst_lev1 = []
elem.clear() #关键在这一名,处理完节点及时清理内存
return res_dic

快速解析超大XML不占用太大内存的更多相关文章

  1. 一个Java对象到底占用多大内存?

    最近在读<深入理解Java虚拟机>,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好 ...

  2. 一个Java对象到底占用多大内存

    在网上搜到了一篇博客讲的非常好,里面提供的这个类也非常实用: import java.lang.instrument.Instrumentation; import java.lang.reflect ...

  3. 一张图片资源要占用多大内存xhdpi xxhdpi

    一张图片资源要占用多大内存,可以用下面的计算公式计算 4 * withPixel*(targetDensity /sourcedensity) * heightPixel*(targetDensity ...

  4. 高端面试必备:一个Java对象占用多大内存

    这个问题一般会出现在稍微高端一点的 Java 面试环节.要求面试者不仅对 Java 基础知识熟悉,更重要的是要了解内存模型. Java 对象模型 HotSpot JVM 使用名为 oops (Ordi ...

  5. android避免decodeResource图片时占用太大的内存

    增加largeHeap="true"属性. android:largeHeap Whether your application's processes should be cre ...

  6. mysql5.6默认情况下内存占用太大

    下载了mysql5.6.12 ,默认占用内存达400多M,  而原来使用的5.0 只有30M.. 解决方案:调整以下参数----------------performance_schema_max_t ...

  7. XE 安装后C盘占用太大,C盘空间清理

    XE安装完C盘可以清理的垃圾缓存文件 C:\ProgramData\{0DE47792-19BD-4AF4-B9CF-6378FBA44825}  XE6 9个G,xe7 18G XE6如此,XE7安 ...

  8. mui 每次页面跳转用mui.openWindow会不会占用很大内存?

    http://ask.dcloud.net.cn/question/5384 不能每次用mui.openWindow.不用的webview要close,一个webview被close后会露出其他没有被 ...

  9. Unity3D占用内存太大的解决方法

    原地址:http://www.cnblogs.com/88999660/archive/2013/03/15/2961663.html 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大 ...

随机推荐

  1. [手机取证] Jonathan Zdziarski公开的苹果iOS后门及POC视频

    Jonathan Zdziarski 近日在其推特上公布了此“后门”的研究及POC视频,并表示全球媒体“夸大”了此事,自己“从未表示过认为此后门与NSA的监控行为有关”. 视频 http://pan. ...

  2. css体验优化之图片容器设置宽高比

    需求 我们在做web页面的时候,经常会有一些图片列表,例如下图的视频列表以及表情列表:        需求要求: 1. 列表是responsive的,在不同宽度的浏览器下面,图片要自适应容器宽度 2. ...

  3. HDNOIP201405杨辉三角

    2016.1.27 试题描述 杨辉三角是形如如下的数字三角形: 1 1    1 1   2    1 …… 现在想求出杨辉三角第N行的N个数中,有多少个数能被给定的质数p整除. 输入 一行两个空格隔 ...

  4. Shogun网站上的关于主流机器学习工具包的比较

    Shogun网站上的关于主流机器学习工具包的比较: http://www.shogun-toolbox.org/page/features/   created last updated main l ...

  5. Struts2:效验器——声明式

    就是用xml配置的方式,而不是Java代码的形式,那个是“编程式” Action: package org.ah.s2; import com.opensymphony.xwork2.ActionSu ...

  6. pthread 学习

    1. 创建线程 int pthread_create (pthread_t* thread, pthread_attr_t* attr, void* (*start_routine)(void*), ...

  7. vs中使用openGL

    一.准备工作 创建Empty Project,为了能够使用OpenGL的库函数,需要把相关的库连接到项目中: 1.首先添加库的路径 如上,可以把需要添加的include.lib放到一起比较方便管理 这 ...

  8. oracle安装操作及遇到的错误

    一.准备工作 服务器环境: 服务器端:VMWARE下的win7 64位系统 客户端:宿主机 WIN7 64位系统 软件环境: win64_Oracle_11gR2 PLSQL Developer 11 ...

  9. 批量插入数据(基于Mybatis的实现-Oracle)

    前言:做一个数据同步项目,要求:同步数据不丢失的情况下,提高插入性能. 项目DB框架:Mybatis.DataBase:Oracle. -------------------------------- ...

  10. C#中如何定义全局变量及在各窗体中使用全局变量

    using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; us ...