Android之xml解析
2015-09-15 10:21
441 查看
xml解析分为三种方式:sax,dom,pull。
sax,pull内存占用少,更适合于Android手机开发;pull编程方式较其他两种较为简洁;dom可随意访问任何一个结点;sax,pull是解析同步的,dom是解析好后供用户提取感兴趣的信息。
sax解析:
sax,pull内存占用少,更适合于Android手机开发;pull编程方式较其他两种较为简洁;dom可随意访问任何一个结点;sax,pull是解析同步的,dom是解析好后供用户提取感兴趣的信息。
sax解析:
package com.hnust.util; 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 android.util.Log; import com.hnust.pojo.Person; /*** * SAX解析的工具类 * @author zzg * */ public class SAXForHandler extends DefaultHandler { private static final String TAG="SAXForHandler"; private List<Person> persons; private String perTag;//通过此变量记录前一个标签的名称 Person person; public List<Person> getPerson(){ return persons; } //调用一次,适合一些初始化的动作 @Override public void startDocument() throws SAXException{ persons=new ArrayList<Person>(); Log.i(TAG, "***startDoucemnt****"); } /*** * 调用多次 * */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub if("person".equals(localName)){ for(int i=0;i<attributes.getLength();i++){ Log.i(TAG,"attrName:"+attributes.getLocalName(i)+"_attrValue_:"+attributes.getValue(i)); person=new Person(); person.setId(Integer.valueOf(attributes.getValue(i))); } } perTag=localName; Log.i(TAG, qName+"***startElement****"); } //调用多次 /*** * @param ch[] 当前读取到的字节数组 * @param start 字节开始的位置 * @param length 当前TextNode的长度 */ @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub String data=new String(ch,start,length).trim(); if(!"".equals(data.trim())){ Log.i(TAG,"content:"+data.trim()); } if("name".equals(perTag)){ person.setName(data); }else if("age".equals(perTag)){ person.setAge(Integer.parseInt(data)); } } //调用多次 @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub Log.i(TAG, qName+"***endElement****"); if("person".equals(localName)){ persons.add(person); person=null; } perTag=null;//结束的时候必须为空 } //调用一次 @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub Log.i(TAG, "***endDoucemnt****"); } }
package com.hnust.pojo; public class Person { private int id; private String name; private int age; public Person(){}; public Person(int id,String name,int age){ this.id=id; this.age=age; this.name=name; } @Override public String toString() { // TODO Auto-generated method stub return "id="+id+",name="+name+",age="+age; } public int getId() { return id; } public void setId(int 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; } }
AssetManager asset=getAssets(); InputStream is=asset.open("person.xml"); List<Person> persons=null; StringBuilder sb=new StringBuilder(); switch(v.getId()){ case R.id.sax_button: //sax解析xml文件 SAXForHandler handler=new SAXForHandler(); SAXParserFactory spf=SAXParserFactory.newInstance(); SAXParser parser=spf.newSAXParser(); parser.parse(is, handler); persons=handler.getPerson(); for(Person person:persons){ sb.append(person.toString()); } Toast.makeText(this, sb,1).show(); break;
相关文章推荐
- Android手机 Fildder真机抓包
- Android(java)学习笔记251:ContentProvider使用之添加数据到联系人(掌握)
- android iw
- Android AndroidStudio环境下控制状态栏颜色
- Android 中Activity,Window和View之间的关系
- Android ViewPager+Fragment实现首页滑动翻页
- Android 在Service中监听软键盘显示状态
- Android-Tips
- Android studio导入project
- Android创建杀不死的服务
- android achartengine折线图
- android LayoutParams 简单说明 理解 示例
- 收集的Android开源框架及其地址(备用)
- CircularTools view渐变呈现效果
- android fragment返回键被dialog屏蔽
- Android double输出时保留两位小数
- AndroidStudio 永久显示行数的行号
- Android中事件传递机制的总结(onTouch、onClick、onLongClick等)
- android Init 相关分析
- Android中JNI的使用方法