PULL解析学习

.png)
- 文档的开头和结束分别有文档开始和文档结束事件
- 文档中的每个节点,无论是根节点还是叶子节点,都在节点开始和节点结束的地方有事件
- 文档开始和文档结束事件是有固定位置的,你只要在这个位置做你要做的事情就好了,比如初始化一些资源
- 节点开始和节点结束的事件在很多位置都可能发生,为了精确控制,你可以使用【获取他们的节点名称(name)进行判断】这一方法
- DOM
- DOM是结构化解析,会在内存中维护一个完整的XML的树状结构,开销大,对某些复杂需求可能比较方便
- XML DOM 是 XML Document Object Model 的缩写,即 XML 文档对象模型。DOM(文档对象模型)是W3C标准,提供了标准的解析方式,但其解析效率一直不尽如人意,这是因为DOM解析XML文档时,把所有内容一次性的装载入内存,并构建一个驻留在内存中的树状结构(节点数)。如果需要解析的XML文档过大,或者我们只对该文档中的一部分感兴趣,这样就会引起性能问题。
- 它有一个非常庞大的事件库
- SAX(PULL)
- SAX和PULL的原理是一样的,都不维护什么完整的结构,而是逐行扫描,不保存结构关系,开销小,适合简单的需求
- (两者区别是,SAX使用回调的方式实现,PULL使用switch case的方式实现)
- SAX是事件驱动型XML解析的一个标准接口,SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
public static List<EleTimeValue> parseToETVL(String xmlData) {
//在这新建变量,万一try没有的话,还能返回null
List<EleTimeValue> lists=null;
EleTimeValue eTV=null;
String value = "";
String time ="";
float valuef = 0;
Date timed = null;
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = factory.newPullParser();
xmlPullParser.setInput(new StringReader(xmlData));
int eventType = xmlPullParser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String nodeName = xmlPullParser.getName();
switch (eventType) {
//用eventType来控制什么时候开始解析某个结点
case XmlPullParser.START_DOCUMENT:
lists=new ArrayList<EleTimeValue>();
break;
//碰到STARTTAG之后开始一行行(eventtype可以当做行号)输入下面的ifelse语句中进行判断,不符合就跳出switch,并且在后边把行号加1,然后继续while循环
case XmlPullParser.START_TAG:
//增加一个错误检测,当解析内容时候发现errcode不为0的时候,直接结束解析,跳出swith,也跳出while,直接返回null
//这里传不出msg
if ("ErrCode".equals(nodeName) && !xmlPullParser.nextText().equals("0") ){
Log.d("t", "Null,要返回");
return null;
}else if("RegValue".equals(nodeName)) {
eTV = new EleTimeValue();
}else if("Value".equals(nodeName)) {
value = xmlPullParser.nextText();
valuef = Float.valueOf(value).floatValue()/10;
eTV.setValue(valuef);
}else if("DevTime".equals(nodeName)) {
time = xmlPullParser.nextText();
try {
timed = ft.parse(time);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
eTV.setDate(timed);
}
break;
// 完成解析某个结点
case XmlPullParser.END_TAG:
if ("Reg".equals(nodeName)||"RegValue".equals(nodeName)) {
lists.add(eTV);
eTV = null;
}
break;
}
eventType = xmlPullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
return lists;
}
参考文章:
PULL解析学习的更多相关文章
- Pull解析器学习
1, package com.service; import java.io.InputStream; import java.io.OutputStream; import java.util.Ar ...
- 基础学习总结(四)---内存获取、XML之PULL解析
外部项目引入如果没找到工程文件要先创建一个android项目在引入. 根据要查看的项目名在项目中搜索逐步查看 ==================== 内存详情获取: public class Mai ...
- Android(java)学习笔记187:Android中操作XML数据(使用Pull解析器)
1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...
- Android学习笔记_7_使用 sax 或者 dom 或者 pull 解析XML文件
一.Pull解析介绍: Android上使用SAX和DOM方式解析XML的方法,并且对两种做了简单的比较,通过比较我们知道对在往往内存比较稀缺的移动设备上运行的Android系统来说,SAX是一种比较 ...
- Android(java)学习笔记130:Android中操作XML数据(使用Pull解析器)
1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...
- 安卓使用pull解析器解析XML文件
学习一下: public class MainActivity extends Activity { List<City> cityList; @Override protected vo ...
- Android] Android XML解析学习——方式比较
[Android] Android XML解析学习——方式比较 (ZT) 分类: 嵌入式 (From:http://blog.csdn.net/ichliebephone/article/deta ...
- 使用PULL解析XML文件
转载博文1:http://blog.csdn.net/wangkuifeng0118/article/details/7313241 XmlPull和Sax类似,是基于流(stream)操作文件,然后 ...
- java拾遗3----XML解析(三) StAX PULL解析
使用PULL方式解析XML: Pull是STAX的一个实现 StAX是The Streaming API for XML的缩写,一种利用拉模式解析(pull-parsing)XML文档的API StA ...
随机推荐
- VS调试DLL代码使用”附加到进程“
如果一个DLL解决方案,被另一个DLL2解决方案依赖,DLL2被可执行程序exe1引用 如何调试DLL的代码断点呢 1.可以参考另一篇随笔DLL如何调试 2.先运行起来exe1,然后再DLL项目中”调 ...
- Kafka Java consumer动态修改topic订阅
前段时间在Kafka QQ群中有人问及此事——关于Java consumer如何动态修改topic订阅的问题.仔细一想才发现这的确是个好问题,因为如果简单地在另一个线程中直接持有consumer实例然 ...
- call()、apply()、bind()
1.均可以改变函数的执行上下文,也就是this值: 2.call() apply() function apply(num1, num2){ return sum.apply(this, [num1 ...
- 阿里云CentOS7挂载SSD云盘的方法
https://bbs.aliyun.com/read/151152.html 阿里云购买的第2块云盘默认是不自动挂载的,需要手动配置挂载上. 1.查看SSD云盘 sudo fdisk -l Disk ...
- 【Java知识点专项练习】之 volatile 关键字的功能
volatile是java中的一个类型修饰符.它是被设计用来修饰被不同线程访问和修改的变量.如果不加入volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器 失去大量优化的机会. ...
- testmath
$\Huge ans = \frac{ \sum\limits_{i=1}^{m}{ (x_i - \bar{x})^2 } }{m} \cdot m^2 \\$
- 23种设计模式之策略模式(Strategy)
策略模式是一种对象的行为型模式,定义一系列算法,并将每一个算法封装起来,并让它们可以相互替换.策略模式比算法独立于使用它的客户而变化,其目的是将行为和环境分隔,当出现新的行为时,只需要实现新的策略类. ...
- 调用office COM出现不会退出的问题
症状 在使用.net调用 Microsoft Office 应用程序时,Office 应用程序在调用Quit方法时不会退出. 原因 Visual Studio.NET 从托管代码调用 COM 对象时, ...
- Open XML C# and Word docx documents
openxml sdk2.5 : http://download.microsoft.com/download/5/5/3/553C731E-9333-40FB-ADE3-E02DC9643B31/ ...
- 【转】python中json.loads与eval的区别
JSON有两种结构: “名称/值”对的集合(A collection of name/value pairs).不同的语言中,它被理解为对象(object),纪录(record),结构(struct) ...