传送门轮子的专栏转载请注明http://blog.csdn.net/leverage_1229

本节我们学习XML解析,在Android程序中,Xml解析与Java中几乎相同,最常用的有SAX,DOM,Pull三种解析方式。Android中内置的是Pull解析方式,因此Pull解析也就成为Android推荐的解析方式。接下来我们分别针对这三种XML解析方式进行讲解。

1SAX(Simple API for XML)

SAX是基于事件驱动的模型。通俗的讲就是XML文件在加载的过程中,加载到不同节点会相应地触发不同方法来处理。它属于一次加载,可以处理任意大小的XML文件,它对内存的要求非常低,非常适合手机等移动终端设备。SAX采用的是读取文件的方式,把XML文件当作文本文件读,就只是读取,并不保存任何信息。SAX在解析XML过程中无法中断,只能读取XML文件而不能修改。

1.1常用回调方法(DefaultHandler类)

void startDocument() // 开始文档时触发void endDocument() // 结束文档时触发void startElement(String uri, String localName, String qName, Attributes atts) // 解析节点时触发void endElement(String uri, String localName, String qName) // 结束节点时触发void characters(char[ ] ch, int start, int length) // 处理文本节点

1.2创建SAX解析器

XMLReader reader = XMLReaderFactory.createXMLReader(); // 使用系统默认值来创建一个XMLReaderXMLReader reader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); // 从给定的类名称来创建一个XMLReaderSAXParserFactory spFactory = SAXParserFactory.newInstance(); // 使用javax.xml.parsers包中的SAXParserFactory类和SAXParser类创建SAXParser sParser = spFactory.newSAXParser();

2Pull

Pull也是基于事件驱动的模型。Android中内置了Pull解析包。从字面上就可以看出来,Pull,拉取的意思。需要什么资源就“拉取”什么资源。如果需要的只是XML文件中的一部分,就“拉取”一部分。从而节省资源,提高效率。当然在J2EE中也可以使用Pull解析。

2.1常用回调事件

XmlPullParser.START_DOCUMENT // 开始文档事件XmlPullParser.END_DOCUMENT // 结束文档事件XmlPullParser.START_TAG // 开始节点事件XmlPullParser.END_TAG // 结束节点事件

2.2获得Pull解析器

XmlPullParser parser = Xml.newPullParser();

3DOM(Document Object Model)

文档对象模型,它是基于对象的,又或者是基于树的。它属于两次加载,首先将整个文档载入内存,然后将文档解析形成一棵树。如果文档过大,对内存占用是很大的。但它可以在解析的过程中修改文件树,可以存储文件树的任意部分。
解析思路:
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); // 创建一个DocumentBuilderFactory实例DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); // 创建DocumentBuilderDocument document = documentBuilder.parse(in); // 加载XML文档(Document)Element root = document.getDocumentElement(); // 获取文档的根结点(Element)NodeList nodes = root.getElementsByTagName(ELEMENT_ANDROID); // 获取根结点中所有子节点的列表(NodeList)for (int i = 0; i < nodes.getLength(); i++) {...} // 使用迭代获取子节点列表中的需要读取的结点

更多相关文章

  1. 基础知识:android 数据存储--->文件存储
  2. Android中把文件存放在SDCard
  3. NDK简单实例
  4. android 定制个性按钮 控件
  5. 【Android】Android(安卓)Studio中新创建的app目录结构
  6. Android(安卓)DownloadManager 的使用
  7. Android使用文件进行数据存储的方法
  8. android 开机自动运行程序
  9. Chrome for Android(安卓)编译了两天终于在师傅指导下搞定

随机推荐

  1. 解读2015之Android篇:横向扩张、平稳发展
  2. Android 自定义AlertDialog提交表单
  3. Android开发中Handler的经典总结
  4. 【ALearning】第一章 Android概述
  5. Android平台开发-Bluez function porting
  6. Kernel.org 被黑,获取 Android 源码方法一
  7. cocos2d-x C++通知Android更新UI
  8. Android选项菜单和上下文菜单解析
  9. 在Android JNI环境下使用C++ Lambda表达
  10. Android线程间通信机制