首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

Android-用SAX解析xml资料

2013-02-24 
Android--用SAX解析xml文件主运行类package com.mrzhu.test31import java.io.InputStreamimport java.ut

Android--用SAX解析xml文件

主运行类

package com.mrzhu.test31;import java.io.InputStream;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;public class SAXParse extends Activity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);    }        //按钮事件    public void sax(View v){    startSax();    }private void startSax() {//获得解析器工厂SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();try {//获得解析器SAXParser saxParser = saxParserFactory.newSAXParser();//装载要解析的xml文件InputStream inputStream = getAssets().open("person.xml");SAXHandler saxHandler = new SAXHandler();//调用parse方法开始解析saxParser.parse(inputStream, saxHandler);//取得解析后的结果List<Person> list = saxHandler.getList();for (Person person : list) {Log.i("System.out", person.toString());}} catch (Exception e) {e.printStackTrace();}}}


 

 

 

SAXHandler类:

package com.mrzhu.test31;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<Person> list;private Person currPerson;private String tag;public List<Person> getList() {return list;}/** * 解析到开始标记时执行该方法 */@Overridepublic void startDocument() throws SAXException {super.startDocument();//实例化一个list用于存储解析出来的对象list = new ArrayList<Person>();}/** * 解析到开始元素时执行该方法 */@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {super.startElement(uri, localName, qName, attributes);//当开始标签为person时实例化一个Person对象if("person".trim().equalsIgnoreCase(qName)){currPerson = new Person();//取得属性值currPerson.setPersonid(attributes.getValue(qName));}//将解析到的标签赋值给tagtag = qName;}/** * 当解析到内容时执行该方法 */@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {super.characters(ch, start, length);if(tag != null){//判断解析出来的标签名,则取出对应值并设置给Person对象 if("name".trim().equalsIgnoreCase(tag)){currPerson.setName(new String(ch, start, length));}else if("address".trim().equalsIgnoreCase(tag)){currPerson.setAddress(new String(ch, start, length));}else if("tel".trim().equalsIgnoreCase(tag)){currPerson.setTel(new String(ch, start, length));}else if("fax".trim().equalsIgnoreCase(tag)){currPerson.setFax(new String(ch, start, length));}else if("email".trim().equalsIgnoreCase(tag)){currPerson.setEmail(new String(ch, start, length));}}}/** * 当解析到结束标签时执行该方法 */@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {super.endElement(uri, localName, qName);//若标签名为person,则将Person对象加到list集合中if("person".trim().equalsIgnoreCase(qName)){list.add(currPerson);}tag = null;}/** * 当解析到结束文档标签时执行该方法 */@Overridepublic void endDocument() throws SAXException {super.endDocument();}}


 

 

Person类:

 

package com.mrzhu.test31;public class Person {private String personid;private String name;private String address;private String tel;private String fax;private String email;public String getPersonid() {return personid;}public void setPersonid(String personid) {this.personid = personid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}public String getFax() {return fax;}public void setFax(String fax) {this.fax = fax;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "Person [name=" + name + ", address=" + address + ", tel=" + tel+ ", fax=" + fax + ", email=" + email + "]";}}


 

 

person.xml文件:

 

<?xml version="1.0" encoding="UTF-8"?><people><person personid="E01"><name>Tony Blair</name><address>10 Downing Street, London, UK</address><tel>(061) 98765</tel><fax>(061) 98765</fax><email>blair@everywhere.com</email></person><person personid="E02"><name>Bill Clinton</name><address>White House, USA</address><tel>(001) 6400 98765</tel><fax>(001) 6400 98765</fax><email>bill@everywhere.com</email></person><person personid="E03"><name>Tom Cruise</name><address>57 Jumbo Street, New York, USA</address><tel>(001) 4500 67859</tel><fax>(001) 4500 67859</fax><email>cruise@everywhere.com</email></person><person personid="E04"><name>Linda Goodman</name><address>78 Crax Lane, London, UK</address><tel>(061) 54 56789</tel><fax>(061) 54 56789</fax><email>linda@everywhere.com</email></person></people>


 

 

main.xml文件:

 

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <Button        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:onClick="sax"        android:text="@string/btn_sax" /></LinearLayout>


 

热点排行