- 浏览: 130676 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
hnraysir:
支持,写得不错!
一个android工程的运行过程 -
me101:
正在学习android开发,谢谢了。
android 实用sax 读取xml文件内容 附源码 -
ljh_tnt:
定!正需要这个学习下
android 实用sax 读取xml文件内容 附源码 -
张红飞:
这在看呢
android 使用 pull 解析xml文件 附源码 -
kjsoloho:
请问,为什么同样是getInputStream(有数据),但是 ...
android 使用 pull 解析xml文件 附源码
andorid读取xml文件内容方法有三种 sax dom pull,其中 pull是android自带的
1.先认识一下xml文件中的些术语
xml中的标签和内容都可以叫做节点,其中的persons person name age 这些都叫做元素(element).而像李明 25 这些值叫做文本节点.那么有个问题 中<persons>到<person>之间的是什么,什么都没有? 答案是他也是节点,是文本节点,你会说他里面什么都没有啊,错了,它有回车和空格.这个在sax解析xml中你debug一下就会发现.回车和空格(或者是tab)是会被读取出来的.id是属性.
2.sax
sax是采用事件驱动,就是说他不需要完全读完xml文件,他是读到一个节点就解析一个节点是否符合xml语法,如果符合就调用相对应的方法其实就是回调方法,并且没有记忆功能.下面提到的这些方法都是在ContentHander()接口中的方法.
startDocumnet() :当开始解析xml文件的声明的时候就会触发这个事件, 可以做一些初始化的工作
startElement() 当开始解析元素的开始标签的时候,就会触发这个事件
characters() 当读到文本元素的时候要触发这个事件.
endElement() 当读到结束标签的时候 就会触发这个事件
sax就是这样按照顺序来解析的.
3.sax读取xml文件举例
3-1创建一个项目 ReadXml
3-2将xml文件拷贝到根目录下.
可以看出这个xml文件中有一个可以抽象出来的对象 就是person 属性有id name age
那么我们就建立一个bean
3-3:创建bean
3-4:遵循mvc的架构,我们建立一个service用来读取xml
这句可以看出xml文件是以流的形式传进来的,参数handler就是回调函数的实例,当sax解析器解析xml文件的时候当遇到符合xml的内容就会去handle类中调用对应的上面提到的方法.那我们建立这个XMLContentHandler 就要求这个类要实现ContentHandler()这个接口,但是这个接口中有很多需要实现的方法.sax提供了一个DefaultHandler接口 只要实现这个接口中你感兴趣的方法就可以了.
3-5:创建XMLContentHandler 并完成读取时的事件的实现 注意看注释
3-6:写个测试类来实验 将xml文件装载入 然后读取
完成;
activity在源码中
自己整出来了,会了,感谢lz
1.先认识一下xml文件中的些术语
<?xml version="1.0" encoding="UTF-8"?> <persons> <person id="23"> <name>李明</name> <age>23</age> </person> <person id="22"> <name>李量</name> <age>25</age> </person> </persons>
xml中的标签和内容都可以叫做节点,其中的persons person name age 这些都叫做元素(element).而像李明 25 这些值叫做文本节点.那么有个问题 中<persons>到<person>之间的是什么,什么都没有? 答案是他也是节点,是文本节点,你会说他里面什么都没有啊,错了,它有回车和空格.这个在sax解析xml中你debug一下就会发现.回车和空格(或者是tab)是会被读取出来的.id是属性.
2.sax
sax是采用事件驱动,就是说他不需要完全读完xml文件,他是读到一个节点就解析一个节点是否符合xml语法,如果符合就调用相对应的方法其实就是回调方法,并且没有记忆功能.下面提到的这些方法都是在ContentHander()接口中的方法.
startDocumnet() :当开始解析xml文件的声明的时候就会触发这个事件, 可以做一些初始化的工作
startElement() 当开始解析元素的开始标签的时候,就会触发这个事件
characters() 当读到文本元素的时候要触发这个事件.
endElement() 当读到结束标签的时候 就会触发这个事件
sax就是这样按照顺序来解析的.
3.sax读取xml文件举例
3-1创建一个项目 ReadXml
3-2将xml文件拷贝到根目录下.
<?xml version="1.0" encoding="UTF-8"?> <persons> <person id="23"> <name>李明</name> <age>23</age> </person> <person id="22"> <name>李量</name> <age>25</age> </person> </persons>
可以看出这个xml文件中有一个可以抽象出来的对象 就是person 属性有id name age
那么我们就建立一个bean
3-3:创建bean
package com.leequer.service.demo; /** * <person id="23"> <name>李明</name> <age>23</age> </person> <person id="22"> <name>李量</name> <age>25</age> </person> * @author leequer * * xml文件对应的bean */ public class Person { private Integer id; private String name; private int age; public Person () {} public Person (String name ,int age) { this.name = name; this.age = age; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { // TODO Auto-generated method stub return this.id+",name "+this.name+" age "+this.age+"\n"; } }
3-4:遵循mvc的架构,我们建立一个service用来读取xml
package com.leequer.service; import java.io.InputStream; import java.util.List; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.XMLReader; import com.leequer.service.demo.Person; public class SaxReadxml { public static List<Person> readXml(InputStream inStream)throws Exception { SAXParserFactory spf = SAXParserFactory.newInstance(); // 初始化sax解析器 SAXParser sp = spf.newSAXParser(); // 创建sax解析器 //XMLReader xr = sp.getXMLReader();// 创建xml解析器 XMLContentHandler handler = new XMLContentHandler(); sp.parse(inStream, handler); return handler.getPersons(); } }
sp.parse(inStream, handler);
这句可以看出xml文件是以流的形式传进来的,参数handler就是回调函数的实例,当sax解析器解析xml文件的时候当遇到符合xml的内容就会去handle类中调用对应的上面提到的方法.那我们建立这个XMLContentHandler 就要求这个类要实现ContentHandler()这个接口,但是这个接口中有很多需要实现的方法.sax提供了一个DefaultHandler接口 只要实现这个接口中你感兴趣的方法就可以了.
3-5:创建XMLContentHandler 并完成读取时的事件的实现 注意看注释
package com.leequer.service; import java.util.ArrayList; import java.util.List; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import com.leequer.service.demo.Person; public class XMLContentHandler extends DefaultHandler { private List<Person> persons; private Person person; private String tempString; private static final String NAMESTRING = "name"; private static final String AGESTRING = "age"; private static final String PERSONSTRING = "person"; private static final String IDSTRING = "id"; public List<Person> getPersons() { return persons; } /** * sax 解析文件不带记忆,只读取 对xml文件中的 <person id="23"> <name>李明</name> <age>23</age> * </person> <person id="22"> <name>李量</name> <age>25</age> </person> 这部分感兴趣 * 那么这部分包含了person这个节点元素的开始和结尾,那么就要有startElement和endElement * 这两个方法;还有text的节点元素,(就是像节点之间的回车和空格还有标签中的像李明这样的文字都是文本节点 元素 * (text节点元素)那么要解析文本节点元素就要用到characters 这个方法来获取信息。) */ /** * 要开始读取xml文件的时候调用的方法 * 初始化persons */ @Override public void startDocument() throws SAXException { //这里做list的初始化工作 persons = new ArrayList<Person>(); } /** * sax 读取到文本节点的时候调用了这个方法 */ @Override public void characters(char[] ch, int start, int length) throws SAXException { if (person != null) { String valueString = new String(ch, start, length); if (NAMESTRING.equals(tempString)) { // 如果当前解析到的节点是name 就要将name中的文本节点元素的值得到 person.setName(valueString); } else if (AGESTRING.equals(tempString)) { person.setAge(new Integer(valueString).intValue()); } } } /** * sax 读取到元素节点的时候用到这个方法; */ @Override public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { // 先判断读到的元素是否是person if (PERSONSTRING.equals(localName)) { // 如果读到的是person这个元素 就要保存起来,保存在我们创建的那个person的类中 所以我们要new一个person类 person = new Person(); // attributes是属性。 person.setId(new Integer(attributes.getValue(IDSTRING))); } tempString = localName; } /** * 这个方法是每次遇到结束的标签都会执行的 并不是只遇到最后的结尾才调用 * * 读取完毕遇到person'的结尾 就将封装好的一个personbean保存到list中 并且清空person对象 * */ @Override public void endElement(String uri, String localName, String name) throws SAXException { if(PERSONSTRING.equals(localName)&&person!=null) { persons.add(person); person = null; } tempString = null; } }
3-6:写个测试类来实验 将xml文件装载入 然后读取
package com.leequer.readxml; /** * 测试类 */ import java.io.InputStream; import java.util.Iterator; import java.util.List; import com.leequer.service.SaxReadxml; import com.leequer.service.demo.Person; import android.test.AndroidTestCase; import android.util.Log; public class SaxReadxmlTest extends AndroidTestCase { private String PERSONSTRING = "ObjectPerson"; public void testReadXml() throws Exception {//类装载器 InputStream inputStream = SaxReadxmlTest.class.getClassLoader().getResourceAsStream("NewFile.xml"); List <Person> personsList = SaxReadxml.readXml(inputStream); for (Iterator iterator = personsList.iterator(); iterator.hasNext();) { Person person = (Person) iterator.next(); Log.i(PERSONSTRING, person.toString()); } } }
完成;
activity在源码中
- ReadXml.rar (50.4 KB)
- 下载次数: 1227
评论
4 楼
me101
2013-08-10
正在学习android开发,谢谢了。
3 楼
ljh_tnt
2012-09-18
定!正需要这个学习下
2 楼
zqwfd
2010-09-08
zqwfd 写道
如果我想读取name=李明的信息,应该怎么改?
自己整出来了,会了,感谢lz
1 楼
zqwfd
2010-09-08
如果我想读取name=李明的信息,应该怎么改?
发表评论
-
Keep&火辣健身 视频课程 实现思路分析
2017-02-10 11:44 142需求: ... -
android 全新模拟器
2013-08-01 11:04 515www.genymotion.com 提供了一款全新的an ... -
android 通知 和 通知的声音 (附源码)
2010-12-22 15:01 9833完成后的效果:运行例子,会在手机的状态栏显示一个通知的 ... -
android ndk 环境搭建注意事项 附资料
2010-10-21 15:58 1322ndk环境搭建,耗费了不少时间,我看的就是下面附件中的那个 ... -
多线程下载 附源码
2010-10-18 14:58 1448多线程下载:1.多线程2 下载 这些也是android软 ... -
android sqlite数据库 CRUD
2010-04-28 15:47 0*介绍 android自带sqlite数据库,它是and ... -
android 软件参数设置的保存和读取 附源码
2010-04-28 11:55 9461数据存储的另一种方式.sharedperferences ... -
android 使用 pull 解析xml文件 附源码
2010-04-27 16:44 9135pull解析xml文件,和sax和dom一样 都可以脱离 ... -
android 使用dom方式解析xml文件 附源码
2010-04-27 14:57 2254使用dom解析xml文件不推荐使用,dom解析xml的机 ... -
android sd卡读写 附源码
2010-04-26 09:55 10635将文件存在sd卡中和存在手机中的思路相同就是路径不同,注意看类 ... -
android 文件的读取 附源码
2010-04-19 11:28 1813与前面的文章http://leequer.iteye.com/ ... -
android sdk 无法安装 解决方法
2010-04-18 16:25 3996不知道大家如果将第一次安装的android sdk删除后 再一 ... -
无法安装android sdk
2010-04-02 15:56 2772好容易忙完了开发,想继续开始android的开发,之前重装系统 ... -
android的数据存储和访问 附源码
2010-03-03 16:53 3405android提供了几种文件的存储方式; 1.文件: 2.Sh ... -
android 单元测试 附源码
2010-03-02 16:50 1522单元测试无疑是很重要的; 1.配置 在功能文件AndroidM ... -
android 工程 日志输出 附源码
2010-03-02 15:58 22361.日志输出:我们开发 ... -
一个简单的拨号器 附源码
2010-03-02 10:03 2152开发一个简单的拨号器。 开发一个应用的步骤: 小应用的步骤: ... -
android 的相对布局的使用小记
2010-03-01 14:43 3443android的布局方式有几个,线性布局,绝对布局,表格布局, ... -
一个android工程的运行过程
2010-02-11 16:57 3399rt 首先 : 当一个工程部署到模拟环境上后,当用户点击你 ... -
android工程目录介绍
2010-02-10 16:54 2394生成好的一个android项目的结构: 工程名: ...
相关推荐
NULL 博文链接:https://leequer.iteye.com/blog/653148
SAX 是读取和操作 XML 数据的更快速、更轻量的方 法。SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。它不涉及 DOM 所必需的开销和概念跳跃。 SAX API是一个基于事件的API ,适用于处理...
pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 ...
NULL 博文链接:https://justsee.iteye.com/blog/923439
NULL 博文链接:https://xiva.iteye.com/blog/853098
NULL 博文链接:https://suky.iteye.com/blog/621169
利用JSP直接读写XML文件,分别用DOM解析器和SAX解析器加以实现,非常适合初学者入门,作为一个了解jsp与XML的台阶
java从服务器读取xml文件并以SAX方式解析附带(服务器与解析源码)
Qt使用DOM和SAX两种方式操作XML文件的例程,源码来源为霍亚飞老师的《Qt Creator快速入门》(第三版)
5> XML解析(SAX/DOM/PULL),写xml文件 6> SharedPreferences 第三天 1> SQLite数据库添删改查操作 A.创建数据库 B.SQLiteOpenHelper自动创建数据库的原理实现 C.数据库版本变化 D.编写代码完成添删改查操作...
1.xml的读取和存储,主要是用到dom4j技术,(网络中的文件存储路径采用classLoader) 文件的读取和存储,写了一个工厂类 public class DocumentFactory { private static Document dom=null;//需要共享一个dom,...
它是一行一行的读取 xml 文件进行解析的。不会创建大量的 dom 对象。 所以它在解析 xml 的时候,在内存的使用上。和性能上。都优于 Dom 解析。 第三方的解析: jdom 在 dom 基础上进行了封装、 dom4j 又对 jdom 进行...
实例108 SAX解析XML文件 297 实例109 W3C解析XML文件 301 第13章 Java网络编程 306 实例110 获取IP地址和域名 306 实例111 获取网络资源(URL) 308 实例112 FTP文件传输模拟 311 实例113 自制浏览器 316 ...
18.2.3、读取Excel文件 18.2.4、格式化文本 18.3、本章摘要 附录B:MyEclipse开发工具 19.1、MyEclipse简介 19.2、MyEclipse的安装 19.3、MyEclipse的使用 19.4、配置Tomcat服务器 19.5、MyEclipse卸载 ...
18.2.3、读取Excel文件 18.2.4、格式化文本 18.3、本章摘要 附录B:MyEclipse开发工具 19.1、MyEclipse简介 19.2、MyEclipse的安装 19.3、MyEclipse的使用 19.4、配置Tomcat服务器 19.5、MyEclipse...
第一章 流与文件 1.1 流 1.1.1 读入和写出字节 1.1.2 完整的流家族 1.1.3 组合流过滤器 1.2 文本输入与输出 1.2.1 如何写出文本输出 1.2.2 如何读入文本输入 1.2.3 以文本格式存储对象 1.2.4 字符集 1.3 读入和写出...
\8.1 读写文本文件 219 \8.2 操作二进制文件 220 \8.3 临时文件 222 \8.4 目录操作和文件管理 222 \8.4.1 目录操作 222 \8.4.2 文件管理 224 \8.5 监视文件系统变化 225 \8.6 文件引擎 226 \8.7 小结 226 \...
18.2.3、读取Excel文件 18.2.4、格式化文本 18.3、本章摘要 附录B:MyEclipse开发工具 19.1、MyEclipse简介 19.2、MyEclipse的安装 19.3、MyEclipse的使用 19.4、配置Tomcat服务器 19.5、MyEclipse卸载 ...
18.2.3、读取Excel文件 18.2.4、格式化文本 18.3、本章摘要 附录B:MyEclipse开发工具 19.1、MyEclipse简介 19.2、MyEclipse的安装 19.3、MyEclipse的使用 19.4、配置Tomcat服务器 19.5、MyEclipse卸载 ...