Android解析XML有三种方式:DOM(document object model)、SAX(simple api XML)、PULL

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解析不一样的地方有

  1. pull读取xml文件后触发相应的事件调用方法返回的是数字
  2. 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

解析XML:DOM,SAX,PULL的更多相关文章

  1. - XML 解析 总结 DOM SAX PULL MD

    目录 目录 XML 解析 总结 DOM SAX PULL MD 几种解析方式简介 要解析的内容 DOM 解析 代码 输出 SAX 解析 代码 输出 JDOM 解析 代码 输出 DOM4J 解析 代码 ...

  2. Android 通过Dom, Sax, Pull解析网络xml数据

    这篇文章不是完全原创,XML解析的部分参考了 liuhe688 的文章.文章地址:http://blog.csdn.net/liuhe688/article/details/6415593 这是一个几 ...

  3. JAVA解析XML之SAX方式

    JAVA解析XML之SAX方式 SAX解析xml步骤 通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory 通过SAXParse ...

  4. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  5. python 解析xml 文件: SAX方式

    环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...

  6. [转载] python 解析xml 文件: SAX方式

    环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...

  7. Android解析XML之SAX解析器

    SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件 ...

  8. xml——dom&sax解析、DTD&schema约束

    dom解析实例: 优点:增删改查一些元素等东西方便 缺点:内存消耗太大,如果文档太大,可能会导致内存溢出 sax解析: 优点:内存压力小 缺点:增删改比较复杂 当我们运行的java程序需要的内存比较大 ...

  9. Android系列--DOM、SAX、Pull解析XML

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

随机推荐

  1. 如何在powerdesign15.1中使用自增列

    点击要设置为自增列的列 右键选择properties(或者按下ALT+enter) 点选红框,再点击Microsoft选项卡, 输入开始值和自增值即可 来自为知笔记(Wiz)

  2. Debug就是Debug,Release就是Release

    现在线上发布的时候使用的是增量发布,什么是增量发布呢,就是变化什么,上什么.最近把jenkins搭建上去了,发现每次dll文件大小不一样,已查询发现原来是两个模式debuge模式与release模式搞 ...

  3. C# Session操作

    Session.Abandon();//清除全部Session//清除某个SessionSession["UserName"] = null;Session.Remove(&quo ...

  4. PDF文档转换为图片、图片转成PDF 及PDF合并

    简介 功能:PDF文档按每页转换成一张图片,一张图片转换成一张PDF 并将多张PDF合成一个多页的PDF文档. 经历:在各个网站上搜索始终出现各种问题,尤其是遇到引用的版本问题尤其头疼,不是不能适用当 ...

  5. c# 线程的基本使用

    创建线程 线程的基本操作 线程和其它常见的类一样,有着很多属性和方法,参考下表: 创建线程的方法有很多种,这里我们先从thread开始创建线程 class Program { static void ...

  6. VUE环境安装和创建项目

    1.首先要安装nodejs和npm. 下载nodejs安装,下载地址:https://nodejs.org/en/ 安装很简单一路next即可. 安装完成后可以在cmd窗口输入node -v 和 np ...

  7. Luogu4551 最长异或路径

    题目链接:戳我 emmmmmmmmmm异或一个数两次等于没有操作对吧...所以我们按照前缀的异或和,建一个01trie.....然后之后.....直接在树上贪心地找能和它每一位不一样的数....然后. ...

  8. Oracle数据库exp和imp方式导数据

    这里导入导出路径都在D盘下,默认文件名为:example.dmpexp方式导出数据相关参数项如下: 关键字  说明  默认USERID                     用户名/口令FULL   ...

  9. C# winform中listview排序

    本文解决方案是采用下面链接中的解决方案.十分感谢这篇文章的作者bright:http://blog.163.com/shensc@126/blog/static/1312896522010614103 ...

  10. 火狐浏览器下,td 直接使用position:relative;和background:;产生的边框消失问题

    消失示例: td{ width:40px; height:28px; position:relative; background:#ccc; } 出现问题 问题原因: 我的理解是各个浏览器之间对于ba ...