Android之xml解析

来源:互联网 发布:u盘数据恢复绿色版 编辑:程序博客网 时间:2024/05/16 06:13

xml解析分为三种方式:sax,dom,pull。

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;}//调用一次,适合一些初始化的动作@Overridepublic void startDocument() throws SAXException{persons=new ArrayList<Person>();Log.i(TAG, "***startDoucemnt****");}/*** * 调用多次 *  */@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {// TODO Auto-generated method stubif("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的长度 */@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stubString 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));}}//调用多次@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {// TODO Auto-generated method stubLog.i(TAG, qName+"***endElement****");if("person".equals(localName)){persons.add(person);person=null;}perTag=null;//结束的时候必须为空}//调用一次@Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stubLog.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;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "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;




0 0
原创粉丝点击