- 浏览: 637084 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
laj12347:
楼主太给力了
Eclipse设置、调优、使用 -
kunlyy:
楼主太给力了
Eclipse设置、调优、使用 -
knight_black_bob:
mark ~
Eclipse设置、调优、使用 -
hujunxiang:
好全好全~~~
Eclipse设置、调优、使用 -
bugyun:
楼主辛苦了
Eclipse设置、调优、使用
android 2.3 sdk提供的与sax解析相关的类和接口
它们主要存在与以下的这些包中:
org.xml.sax
org.xml.sax.ext
org.xml.sax.helpers
javax.xml.parsers
android.sax
sax相关介绍
sax存在两个版本1和2,1已经过时了,所以与其相关的api基本也可以忽略(除非是处理遗留代码),现在的话主要使用2.0的sax。
sax是一种推式解析器,所有的事件都是解析器主动发给我们的。它会根据事件的类型,去调用规定好的事件方法。
sax通过以下的接口来规定了一系列的事件方法:
org.xml.sax包中:
ContentHandler,主要包含了在遇到起始标签,结束标签,内容等事件时会调用的方法
ErrorHandler,主要包含了在解析xml时,出现错误时会调用的方法
DTDHandler,主要包含了解析dtd文档时,遇到notation、未解析的entity resolver等事件时,会调用的方法
org.xml.sax.ext包中:
LexicalHandler,主要包含了在遇到comment(注释),dtd declaration(dtd声明),CDATA等事件时会调用的方法
DeclHandler,用在dtd文件中,主要包含了在遇到dtd文档中的相应事件时调用的方法
以下三个很少会用到,这里不做介绍。
Attributes2
EntityResolver2
Locator2
还需要知道的一个类org.xml.sax.helpers.DefaultHandler:
该类可以看作是一个适配器类,就是它实现了ContentHandler, DTDHandler, EntityResover, ErrorHandler,但是在其内部什么也没做,仅仅是为了方便我们使用。
一般的话我们会继承这个类来写事件处理代码,而不是去实现接口。
sax解析一般数据
解析的数据和前一篇中提到的一样:
<root><data><create>8</create><fans>4</fans><home>9</home><mentions>0</mentions><private>0</private></data><errcode>0</errcode><msg>ok</msg><ret>0</ret></root>
它们主要存在与以下的这些包中:
org.xml.sax
org.xml.sax.ext
org.xml.sax.helpers
javax.xml.parsers
android.sax
sax相关介绍
sax存在两个版本1和2,1已经过时了,所以与其相关的api基本也可以忽略(除非是处理遗留代码),现在的话主要使用2.0的sax。
sax是一种推式解析器,所有的事件都是解析器主动发给我们的。它会根据事件的类型,去调用规定好的事件方法。
sax通过以下的接口来规定了一系列的事件方法:
org.xml.sax包中:
ContentHandler,主要包含了在遇到起始标签,结束标签,内容等事件时会调用的方法
ErrorHandler,主要包含了在解析xml时,出现错误时会调用的方法
DTDHandler,主要包含了解析dtd文档时,遇到notation、未解析的entity resolver等事件时,会调用的方法
org.xml.sax.ext包中:
LexicalHandler,主要包含了在遇到comment(注释),dtd declaration(dtd声明),CDATA等事件时会调用的方法
DeclHandler,用在dtd文件中,主要包含了在遇到dtd文档中的相应事件时调用的方法
以下三个很少会用到,这里不做介绍。
Attributes2
EntityResolver2
Locator2
还需要知道的一个类org.xml.sax.helpers.DefaultHandler:
该类可以看作是一个适配器类,就是它实现了ContentHandler, DTDHandler, EntityResover, ErrorHandler,但是在其内部什么也没做,仅仅是为了方便我们使用。
一般的话我们会继承这个类来写事件处理代码,而不是去实现接口。
sax解析一般数据
解析的数据和前一篇中提到的一样:
<root><data><create>8</create><fans>4</fans><home>9</home><mentions>0</mentions><private>0</private></data><errcode>0</errcode><msg>ok</msg><ret>0</ret></root>
<!-- 便于阅读的格式 --> <root> <data> <create>8</create> <fans>4</fans> <home>9</home> <mentions>0</mentions> <private>0</private> </data> <errcode>0</errcode> <msg>ok</msg> <ret>0</ret> </root>
// 解析器创建 SAXParserFactory factory = SAXParserFactory.newInstance(); // 配置要创建的parser的特性,配置特性的方法在android api中是无法调用的(主要是考虑到它是移动设备,某些特性太耗性能了) // 像腾迅微博返回的xml数据可以交换关闭dtd验证(提升3倍的速度)和命名空间 // factory.setValidating(false); // 在android上默认为false // factory.setNamespaceAware(false); // 在android上默认为false // 创建解析器 SAXParser parser = factory.newSAXParser(); InputSource source = new InputSource("d:/test.xml"); MyDefaultHandler handler = new MyDefaultHandler(); parser.parse(source, handler); // 事件处理类 public class MyDefaultHandler extends DefaultHandler { @Override public void startDocument() throws SAXException { // 文档开始 } @Override public void endDocument() throws SAXException { // 文档结束 } private static final int root = 0; private static final int data = 1; private static final int create = 2; private static final int fans = 3; private static final int home = 4; private static final int mentions = 5; private static final int privates = 6; int currentTag = -1; StringBuilder text = null; // lName(local name)只有在开启命名空间(setNamespaceAware时才有值),而qName是一直有值的 // 注意在android上,默认命名空间为false,但它的lName总是有值,qName总是没值(如:yd:phone,lName会返回phone) @Override public void startElement(String uri, String lName, String qName, Attributes attrs) throws SAXException { if ("root".equals(qName)) { currentTag = root; } else if ("data".equals(qName)) { currentTag = data; } else if ("create".equals(qName)) { currentTag = create; text = new StringBuilder(); } else if ("fans".equals(qName)) { currentTag = fans; text = new StringBuilder(); } else if ("home".equals(qName)) { currentTag = home; text = new StringBuilder(); } else if ("mentions".equals(qName)) { currentTag = mentions; text = new StringBuilder(); } else if ("private".equals(qName)) { currentTag = privates; text = new StringBuilder(); } else { // unknow element, just pass } } // lName(local name 没有前缀的名称)只有在开启命名空间(setNamespaceAware时才有值),而qName是一直有值的 // 注意在android上,默认命名空间为false,但它的lName总是有值,qName总是没值(如:yd:phone,lName会返回phone) @Override public void endElement(String uri, String lName, String qName) throws SAXException { switch (currentTag) { case root: // 该元素结束后,马上就是endDocument了。 break; case data: currentTag = root; break; case create: // setCreate(text.toString()); currentTag = data; break; case fans: // setFans(text.toString()); currentTag = data; break; case home: // setHome(text.toString()); currentTag = data; break; case mentions: // setMentions(text.toString()); currentTag = data; break; case privates: // setPrivates(text.toString()); currentTag = data; break; default: // unknow element, just pass } } @Override public void characters(char[] ch, int start, int length) throws SAXException { switch (currentTag) { case create: case fans: case home: case mentions: case privates: // get the text text.append(new String(ch, start, length)); break; case root: case data: default: // have no interesting text to get } } }
发表评论
-
Error: Cannot run program "sh": Launching failed
2014-02-20 21:05 3675**** Build of configuration De ... -
通过wifi来使用ADB[转]
2013-11-16 16:09 1499adb除了通过usb连接外,还可以通过tcp连接建立调试,在 ... -
Installation failed due to invalid APK file!
2013-11-16 15:42 8144今天在Eclipse里面测试Android的开发。 写好的代 ... -
QQ2013导致adb不能使用问题的修复[转]
2013-11-16 14:48 1613由于实在没法不用QQ,当QQ哭着闹着要升级到最新版的时候,手 ... -
adt安装慢解决
2013-06-08 14:29 4759安装adt的时候不管时在线安装还是下载下来了离线安装,都不见安 ... -
android 百度地图 wgs84和baidu09坐标转换
2012-11-14 23:35 17650wgs84: gps获取出来的坐标 ... -
hiero使用
2012-11-14 16:51 5135hiero是一个java小程序,能够帮助用户自定义.fnt ... -
分享一个日志类
2012-11-09 02:07 351/*** * <p> 封装日志api的调用 ... -
android相关工具收集
2012-07-30 09:33 1237常用 Java 静态代码分析工具的分析与比较 http://b ... -
proguard使用
2012-07-26 23:39 5326proguard的常见配置参数 -include {filen ... -
一张图让你明白android 九宫格工具使用
2012-07-07 16:13 2667... -
android sdk, adt等的下载
2012-06-28 21:38 16854一些小技巧 在eclipse中 ... -
ProgressBar定制
2011-12-07 09:04 4103ProgressBar的基本使用 可以参考这个:http:// ... -
android 源码 阅读
2011-11-24 14:50 3034虽然android的源码也时不时的会去看,但大部分还是只能看懂 ... -
Dialog定制
2011-11-18 14:47 7170定制dialog的方式 1. 可以通过Theme的方式,and ... -
Toast的使用
2011-10-31 16:12 6300Toast的基本原理其实就是将一个View添加到WindowM ... -
android 开发资料收集
2011-10-28 14:32 1712Android 解屏幕锁与点亮屏幕:键盘锁(KeyguardM ... -
android单元测试
2011-09-09 17:08 0android测试框架涉及的类的UML图 activity测 ... -
android.os包中一些类的使用
2011-09-08 15:09 23560android.os.Build Build.BOARD ... -
android游戏开发学习
2011-09-06 16:55 10967相关资源 2D中如何判断一点在另一个点的那个方位: http: ...
相关推荐
1. 创建XML解析器:首先,我们需要创建一个XMLReader对象,它是SAX解析器的接口,可以通过XMLReaderFactory类来实例化。 2. 设置事件处理器:然后,我们为XMLReader对象设置一个ContentHandler,这是一个接口,包含...
在Android中,有多种解析XML的方法,如DOM、SAX和Pull解析器。本篇主要讨论的是SAX解析,这是一种基于事件驱动的、高效的解析方式,适合处理大体积的XML文件。 SAX解析器逐行读取XML文档,当遇到开始标签、结束标签...
XML解析是将XML文档转换为应用程序可以处理的数据的过程。本篇文章将重点讨论Android中的SAX(Simple API for XML)解析器,这是一种事件驱动的解析方法,适合处理大文件或内存有限的设备。 ### SAX解析原理 SAX...
SAX是一种事件驱动的XML解析器,它不会像DOM解析器那样将整个XML文档加载到内存中,而是逐行读取,遇到每个元素或属性时触发相应的事件回调。这种方式节省了内存,特别适合处理大型XML文件。 1. **SAX解析的基本...
总之,Android平台上的XML解析,特别是SAX解析,是一个重要的技能,可以帮助开发者高效地处理XML数据,节约宝贵的系统资源。通过理解和实践SAX解析,开发者能够更好地处理XML文档,为应用提供更加流畅的性能体验。
本资料包“xml.rar”主要关注Android环境下的XML解析,特别是SAX解析器,同时也涵盖了DOM和Pull解析方式。 1. XML基本概念: XML是一种自描述性的标记语言,它通过标签来定义数据结构。每个XML文档都包含元素、...
在Android开发中,处理XML数据有多种方式,包括SAX(Simple API for XML)、DOM(Document Object Model)和PULL解析器。本篇文章将重点讨论SAX解析器,一种事件驱动的解析模型,它以流式处理XML文档,具有内存占用...
而为了处理这些XML文件,开发者需要了解不同的XML解析技术,其中SAX(Simple API for XML)是一种常见的流式解析方式。 #### SAX解析XML的基本原理 SAX是一种基于事件驱动的解析方式,它通过一系列事件来通知应用...
在Android开发中,有三种主要的XML解析技术:SAX(Simple API for XML)、DOM(Document Object Model)和PULL(Pull Parser)。下面将详细介绍这三种解析方式及其在Android中的应用。 1. SAX解析: SAX(Simple ...
Android系统提供了三种主要的XML解析方式:DOM(Document Object Model)、PULL(Pull Parser)和SAX(Simple API for XML)。每种方法都有其独特的特性和应用场景,下面将详细介绍这三种XML解析方式。 1. DOM解析...
- Android提供了两种主要的XML解析方式:DOM(文档对象模型)和SAX。DOM解析器将整个XML文档加载到内存中形成一棵树,适合小规模数据;SAX则更适用于大文件,因为它按需解析。 3. **SAX解析流程** - 创建`...
在Android应用中,我们通常使用两种方式来解析XML:DOM(Document Object Model)解析器和SAX(Simple API for XML)解析器。 1. DOM解析: DOM解析器将整个XML文件加载到内存中,形成一个树形结构,可以方便地遍历...
本文将深入探讨XML解析中的SAX(Simple API for XML)解析方法,并结合一个具体的Android 4.0网络编程示例进行详细讲解。 SAX解析是一种基于事件驱动的解析方式,它不会一次性加载整个XML文档到内存,而是逐行读取...
总结,Android中的XML解析主要有DOM、SAX和XMLPullParser三种方式,每种都有其适用场景。SAX适用于处理大文件和节省内存,而DOM适用于需要频繁查询和修改的场景,XMLPullParser则提供了一种介于两者之间的灵活性。...
在Android中,有三种主要的XML解析方式:SAX(Simple API for XML)、DOM(Document Object Model)和Pull Parser。下面将详细介绍这三种解析方式,并结合person类的实例进行讲解。 1. SAX解析: SAX是一种事件驱动...
这篇博文将深入探讨Android中的XML解析机制,包括DOM、SAX和Pull解析器三种主要方法。 首先,我们来看DOM解析。DOM(Document Object Model)是一种将XML文档加载到内存中并创建一个树形结构的方法。通过DOM解析,...
本文将深入探讨如何在Android中使用两种常见的XML解析技术——SAX(Simple API for XML)和PULL(Pull Parser)来解析天气预报的XML数据。这两种方法各有优缺点,适用于不同的场景。 首先,我们来看SAX解析器。SAX...
SAX(Simple API for XML)是XML解析器的一种,它采用事件驱动的方式,以流式处理XML文档,适合处理大型XML文件,因为它不需要一次性加载整个文档到内存中。本篇文章将详细介绍如何在Android平台上使用SAX方法解析...
SAX(Simple API for XML)是XML解析器的一种,它采用事件驱动模型,以流式的方式处理XML文档,对内存的占用较小,适合处理大型XML文件。本示例"android sax解析xml模板源码"提供了一个使用SAX解析XML的实例,方便...
Android 中提供了多种 XML 解析方法,包括 SAX、DOM 和 Pull 解析器。 * SAX(Simple API for XML)解析器是一种基于事件的解析器,它可以将 XML 文件解析为一系列事件,然后使用回调函数处理这些事件。SAX 解析器...