/***********2016年5月6日 更新**********************/

知乎:Android 中有哪几种解析 xml 的类,官方推荐哪种 ? 以及它们的原理和区别?

刘吉财:

主要有dom,sax和pull三种,不过貌似官方推荐使用pull,这个不是很了解,但和sax类似,都是利用事件驱动的,根据不同的标签来处理事件。dom的话是把xml文件用树的形式,在解析过程中将整棵树保存到内存中,效率相对于sax来说比较低。所以建议使用sax啦

/*************************************************/

新建一个天气信息的xml文件,新建一个业务包,包里面一个业务类,暴露获取天气的方法,新建一个domain包,包里面一个天气的业务bean,业务bean里面根据xml的节点建立成员属性,生成get set方法,生成有参和无参的构造函数,在业务方法里面解析xml文件塞到业务集合里面。

Javaweb里面解析xml,DOM解析,一次性加载到内存里面,生成树状的结构,消耗的内存大,SAX解析,基于事件的解析,速度快不能倒退,android下是pull解析,类似SAX解析

获取XmlPullParser对象,通过Xml.newPullParser方法,

调用XmlPullParser对象的setInput(inputSTream,inputEncoding),文件输入流,编码

调用XmlPullParser对象的getEventType()获得事件类型,有Xml.START_DOCUMENt ,Xml.END_DOCUMENT,Xml.START_TAG,Xml.END_TAG

通过循环不停的取

While(类型不等于END_DOCUMENT){

}

在这个循环里面switch进行判断,当START_TAG的时候,调用XmlPullParser对象的getName()方法获取节点的名称,等于一个值得时候,创建List集合,等于一个值得时候创建业务对象,调用XmlPullParser对象的getAttributeValue()可以获取属性,调用nextText()可以获取节点内容,当END_TAG的时候业务对象add放入集合,

当Xml文件在类路径下,可以通过类加载器直接加载xml文件,例如 MainActivity.class.getClassloader().getResourceAsStream(文件名),为了好看点,可以在业务bean里面生成toString()方法,可以方便打印查看,

[android] 采用pull解析xml文件的更多相关文章

  1. android——使用pull解析xml文件

    1.persons.xml 将persons.xml文件放到src目录下.其代码如下: <?xml version='1.0' encoding='UTF-8' standalone='yes' ...

  2. Android中pull解析XML文件的简单使用

    首先,android中解析XML文件有三种方式,dom,sax,pull 这里先讲pull,稍候会说SAX和DOM pull是一种事件驱动的xml解析方式,不需要解析整个文档,返回的值是数值型,是推荐 ...

  3. Andorid- 反序列化,采用pull解析 xml 文件

    MainActivity.java 主入口,通过获得 XML文件 ,然后将解析后的文件标签以及文本内容拼接到 StringBuffer中,最后显示在TextView上 package com.exam ...

  4. Android -- 创建XML文件对象及其序列化, pull解析XML文件

    1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...

  5. 使用PULL解析XML文件

    转载博文1:http://blog.csdn.net/wangkuifeng0118/article/details/7313241 XmlPull和Sax类似,是基于流(stream)操作文件,然后 ...

  6. 使用XML序列化器生成XML文件和利用pull解析XML文件

    首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...

  7. pull解析xml文件

    pull解析xml文件 先自己写一个xml文件,存一些天气信息 拿到xml文件 InputStream is = getClassLoader().getResourceAsStream(" ...

  8. Android pull解析xml文件

    本文介绍android中使用pull来解析xml文件 先自己写一个xml文件,存一些天气信息 <?xml version="1.0" encoding="UTF-8 ...

  9. Android SAX、DOM、Pull解析xml文件剖析与案例讲解

    XML介绍 XML(Extensible Markup Language) 即可扩展标记语言,与HTML一样,都是SGML(Standard Generalized Markup Language,标 ...

随机推荐

  1. react整理一二(初入React世界)

    react重要思想:组件化(按钮组件.对话框组件.日期组件等等).JSX语法 react把代码和正式渲染目标隔离开来,除了可以在浏览器渲染到DOM来开发网页,还能用于开发原生移动运用 1.专注视图层: ...

  2. Codeforces Round #424 (Div. 1, rated, based on VK Cup Finals)

    A 题意:给你人的坐标,钥匙的坐标,办公室的坐标.要求所有人能够拿到钥匙并且走到办公室的最短时间.一个位置只能有一个人,一个位置只有一把钥匙,人和钥匙可以在同一个位置. 思路:DP+贪心,dp[i]表 ...

  3. html5 css选择器。 井号,句号的区别

    .理解CSS的样式组成CSS里的样式表是有规则组成的,每条规则有三个部分组成:1.选择器(如下面例子中的:“body”),告诉浏览器文档的哪个部分受规则影响:2.属性(如实例中的font-family ...

  4. 【SP26073】DIVCNT1 - Counting Divisors 题解

    题目描述 定义 \(d(n)\) 为 \(n\) 的正因数的个数,比如 \(d(2) = 2, d(6) = 4\). 令 $ S_1(n) = \sum_{i=1}^n d(i) $ 给定 \(n\ ...

  5. mysql5.5 五种日期

    mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  D ...

  6. Python开发端口扫描器

    首先是最常用的端口扫描器: 虽说有nmap等强大的工具,不过如果由于条件限制无法安装Nmap呢? 我这个脚本写的比较简单,默认扫描1-65535全部的端口 实际的话,可以根据需要自己修改脚本来实现定制 ...

  7. 怎样在mybatis里向mysql中插入毫秒数的时间?

    由于业务场景需求,需要记录精准的时间,但是呢,又不要想使用int类型来存储时间,因为这样的可读性比较差了. 怎样在mybatis中向数据库插入毫秒级别的时间呢? 首先,先来看看怎样向数据库中插入毫秒时 ...

  8. 深入分析Java I/O的工作机制 (一)

    此篇博客看至许令波的深入分析javaWeb内幕书籍, 此篇博客写的是自己看完之后理解的重点内容,加一些理解,希望对你有帮助. 1.Java的I/O类库的基本架构 先说一下什么是类库:可以说是类的集合, ...

  9. shell脚本中if的“-e,-d,-f”

    文件表达式-e filename 如果 filename存在,则为真-d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真-L ...

  10. AI - 框架(Frameworks)

    1 - Scikit-Learn Sklearn(scikit-learn: machine learning in Python):https://scikit-learn.org/ 文档丰富而又详 ...