解析XML:DOM,SAX,PULL
2017-03-01 22:49
232 查看
Android解析XML有三种方式:DOM(document object model)、SAX(simple api XML)、PULL
这种方式解析是一种基于事件驱动的api,有两个部分,解析器和事件处理器:
解析器就是XMLReader接口,负责读取XML文档,和向事件处理器发送事件(也是事件源),
事件处理器ContentHandler接口,负责对发送的事件响应和进行XML文档处理。
Pull解析和Sax解析不一样的地方有
pull读取xml文件后触发相应的事件调用方法返回的是数字
pull可以在程序中控制想解析到哪里就可以停止解析。
DOME-smsBackup
这个demo是最简版,如果要运用到较大数据上时需添加线程,否则会因主线程阻塞导致备份失败
http://www.android100.org/html/201409/07/63419.html
1、DOM
DOM解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据。使用DOM操作XML的代码看起来比较直观,并且,在某些方面比基于SAX的实现更加简单。但是,因为DOM需要将 XML文件的所有内容读取到内存中,所以内存的消耗比较大,特别对于运行Android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用SAX 来解析XML文件,当然,如果XML文件的内容比较小采用DOM是可行的。2、SAX
SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。?SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。这种方式解析是一种基于事件驱动的api,有两个部分,解析器和事件处理器:
解析器就是XMLReader接口,负责读取XML文档,和向事件处理器发送事件(也是事件源),
事件处理器ContentHandler接口,负责对发送的事件响应和进行XML文档处理。
3、PULL
Pull解析器的运行方式与 SAX 解析器相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull。Pull解析和Sax解析不一样的地方有
pull读取xml文件后触发相应的事件调用方法返回的是数字
pull可以在程序中控制想解析到哪里就可以停止解析。
DOME-smsBackup
public void click(View view) { // TODO Auto-generated method stub List<SmsInfo> smsInfos = new ArrayList<SmsInfo>(); Cursor cursor = getContentResolver().query(Uri.parse("content://sms/"), new String[] { "address", "body", "date", "type" }, null, null, null); while (cursor.moveToNext()) { String address = cursor.getString(0); String body = cursor.getString(1); long date = cursor.getLong(2); int type = cursor.getInt(3); SmsInfo smsInfo = new SmsInfo(address, body, date, type); smsInfos.add(smsInfo); } SmsUtils.smsBackupXml(smsInfos, getApplicationContext()); cursor.close(); }
public static void smsBackupXml(List<SmsInfo> smsInfos, Context context) { try { FileOutputStream fos = new FileOutputStream(new File( Environment.getExternalStorageDirectory(), "smsBackup.xml")); XmlSerializer xSerializer = Xml.newSerializer(); xSerializer.setOutput(fos, "utf-8"); xSerializer.startDocument("utf-8", true); xSerializer.startTag(null, "smss"); for (SmsInfo smsInfo : smsInfos) { xSerializer.startTag(null, "sms"); xSerializer.attribute(null, "id", smsInfo.getId() + ""); xSerializer.startTag(null, "address"); xSerializer.text(smsInfo.getAddress()); xSerializer.endTag(null, "address"); xSerializer.startTag(null, "body"); xSerializer.text(smsInfo.getBody()); xSerializer.endTag(null, "body"); xSerializer.startTag(null, "date"); xSerializer.text(smsInfo.getDate() + ""); xSerializer.endTag(null, "date"); xSerializer.startTag(null, "type"); xSerializer.text(smsInfo.getType() + ""); xSerializer.endTag(null, "type"); xSerializer.endTag(null, "sms"); } xSerializer.endTag(null, "smss"); xSerializer.endDocument(); fos.close(); Toast.makeText(context, "备份成功", 1).show(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); Toast.makeText(context, "备份失败", 1).show(); } }
这个demo是最简版,如果要运用到较大数据上时需添加线程,否则会因主线程阻塞导致备份失败
http://www.android100.org/html/201409/07/63419.html
相关文章推荐
- android中解析XML文件方式—DOM SAX PULL
- Android 中利用SAX ,Dom,pull解析 XML 文件
- Android解析XML三种方式(PULL、SAX、DOM)
- Dom Sax Pull解析xml
- Android解析XML三种方式(PULL、SAX、DOM)
- android-XML解析Dom,Sax,Pull
- SAX、DOM、PULL解析XML
- Android用Sax,Pull,Dom解析xml
- Java解析xml的主要解析器: SAX和DOM的选择(附上新方法--Pull解析)
- android解析XML的三种方式(DOM,SAX,PULL)
- Java解析xml的主要解析器: SAX和DOM的选择(附上新方法--Pull解析)
- 解析XML(SAX、DOM、PULL、dom4j)
- android解析XML总结(SAX、Pull、Dom三种方式)
- Java解析xml的主要解析器: SAX和DOM的选择(附上新方法--Pull解析)
- 三种方式解析XML(DOM,Pull,Sax,并带文件编码识别).........................by 私念
- Android 开发之路十---------SAX,DOM,PULL解析XML
- Android学习笔记(七)-XML解析与生成:SAX、DOM、PULL(推荐)
- sax、dom、pull解析xml
- xml解析:Sax,Dom,pull解析
- android sax dom pull 解析xml 和生成xml