android xml 解析
2013-04-19 23:45 java20130722 阅读(151) 评论(0) 编辑 收藏 举报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 ; @Override public void startDocument() throws SAXException { users = new ArrayList<User>() ; } @Override public void endDocument() throws SAXException { super.endDocument(); } @Override public 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")) ; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if("user".equals(localName)){ users.add(user) ; } } @Override public 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简单些(个人认为)。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步