android xml 解析
来源:互联网 发布:国学大师软件 编辑:程序博客网 时间:2024/06/16 23:31
android xml 解析
在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX、Pull、Dom解析方式。
SAX特点: 解析方式是一种基于事件驱动的,消耗的内存少
Pull特点: 解析方式是一种基于事件驱动的,消耗的内存少,在android系统内部的xml解析都是用这种方式
Dom特点: dom是把全部文件读入到内存中,这种方式很消耗内存,对于内存资源本来就很少的android手机,这种 方式不太建议使用。
个人建议: SAX和pull都比较适合mobile,Dom适合服务器解析,随着mobile手机的内存增加,Dom也许可以使用。
SAX解析例子:
XML:
<?xml version="1.0" encoding="utf-8"?><users><user name="admin0" age="26">root0</user><user name="admin1" age="26">root1</user><user name="admin2" age="26">root2</user><user name="admin3" age="26">root3</user></users>放在src/目录下
SAXHandler:
package com.hualu.androidxml;import java.util.ArrayList;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class SAXHandler extends DefaultHandler {private List<User> users ;User user ;int i = 1 ;@Overridepublic void startDocument() throws SAXException {users = new ArrayList<User>() ;}@Overridepublic void endDocument() throws SAXException {super.endDocument();}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {if("user".equals(localName)){i = 2 ;user = new User() ;user.setName(attributes.getValue("name")) ;user.setAge(attributes.getValue("age")) ;}}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {if("user".equals(localName)){users.add(user) ;}}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {if(i == 2)user.setPassword(String.valueOf(ch,start,length)) ;i = 1 ;}public List<User> getUsers() {return users ;}}SAXClient:
package com.hualu.androidxml;import java.io.InputStream;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import android.content.Context;public class SAXClient {public void parserXML(Context context) {try {SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser parser = factory.newSAXParser();SAXHandler handler = new SAXHandler() ;InputStream file = SAXClient.class.getClassLoader().getResourceAsStream("user.xml");parser.parse(file, handler) ;List<User> users = handler.getUsers() ;for(User user: users){System.out.println(user.getName() + " ; " + user.getPassword() + " ; " + user.getAge());}} catch (Exception e) {}}}具体步骤:
1、实例化一个工厂SAXParserFactory
2、实例化SAXPraser对象,创建XMLReader 解析器
3、实例化Handler,处理器
4、注册解析器
4、读取文件流
5、解析文件
Pull解析例子:
XML:
<?xml version="1.0" encoding="utf-8"?><users><user name="admin0" age="26">root0</user><user name="admin1" age="26">root1</user><user name="admin2" age="26">root2</user><user name="admin3" age="26">root3</user></users>放在res/xml目录下。
PullXMLParser:
package com.hualu.androidxml;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.res.XmlResourceParser;public class PullXMLParser {private Activity activity ;public PullXMLParser(Activity activity ){this.activity = activity;}public List<User> parser(){List<User> users = new ArrayList<User>() ;XmlResourceParser xrParser = activity.getResources().getXml(R.xml.user);try{while(xrParser.getEventType() != XmlResourceParser.END_DOCUMENT) {if(xrParser.getEventType() == XmlResourceParser.START_TAG){String tagName = xrParser.getName() ;if("user".equals(tagName)){User user = new User() ;user.setName(xrParser.getAttributeValue(null, "name")) ;user.setAge(xrParser.getAttributeValue(null, "age")) ;user.setPassword(xrParser.getText()) ;users.add(user) ;}}xrParser.next() ;};}catch (Exception e) {}return users ;}}具体步骤:
1. 通过Resource,取得XML文件数据,实例化一个
XmlResourceParser
2. 通过
XmlResourceParser的事件判断,解析XmL
这种方式比SAX简单些(个人认为)。
- XML---Android中解析XML .
- XML - Android中解析XML
- android 解析XML 生成XML
- android Pull解析(XML解析)
- android XML解析
- Android Manifest.xml解析
- Android XML文档解析
- android xml解析
- android--xml解析
- Android--xml解析(Dom)
- Android中解析XML
- android SAX解析XML
- android中xml解析
- android教程--xml解析
- Android中XML解析
- android xml解析(一)
- android xml解析(二)
- Android--DOM解析XML
- 自定义dialog对话框获取EditText数据demo
- 二叉解决 hdu 1872 稳定排序
- VS2008 C# .net compact framework 警告的处理(部分)
- lua 中pairs 和 ipairs区别
- 几道比较基础的Java面试题 .
- android xml 解析
- 黑马程序员_java中的IO流2
- HibernateDaoSupport
- svn: 无法连接主机“x.x.x.x”: 没有到主机的路由
- hibernate中的session
- Enterprise Linux Server release 6.3 (Santiago) 网卡未激活
- 简单的PHP日历算法
- Hibernate无主键配置文件编写
- FlameDesktop - 开发进程 - 05