android使用sax解析xml

来源:互联网 发布:练手速的软件 编辑:程序博客网 时间:2024/05/17 22:04

随着技术的发展,现在的web已经和以前不同了。web已经逐渐像移动的方向倾斜,作为程序员的确应该拓展一下自己的知识层面。学习各方面的知识,今天就接着前几天的弄一下android的xml解析,这次就使用sax的方式解析xml.下面就一步一步的来做吧。

1.编写一个简单的xml

<?xml version="1.0" encoding="UTF-8"?><persons>  <person id="01">     <name>will</name>     <age>21</age>  </person>  <person id="02">     <name>will2</name>     <age>22</age>  </person></persons>


 

2.编写pojo类

package org.lxh.vo;public class Person {private String id;private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String toString() {return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getId() {return id;}public void setId(String id) {this.id = id;}}


3.写一个解析xml的类

package org.lxh.impl;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.lxh.vo.Person;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import android.util.Log;public class Parse {public List<Person> findAll(InputStream in) throws Exception {SAXParserFactory factory = SAXParserFactory.newInstance(); //创建解析工厂SAXParser parser = factory.newSAXParser();ParsePerson chuli = new ParsePerson();parser.parse(in, chuli);in.close(); //关闭输入流return chuli.getData();}    //开始解析xmlpublic class ParsePerson extends DefaultHandler {List<Person> all = null;Person person = null;String flag = null;public List<Person> getData() {return all;}public void startDocument() throws SAXException {all = new ArrayList<Person>();  //实例化集合}public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {if ("person".equals(localName)) {  person = new Person();person.setId(attributes.getValue(0)); //取得id的内容}flag = localName;  //记录上一个element}public void characters(char[] ch, int start, int length)throws SAXException {if (flag != null) {  //这样做取得的值就不会重复String data = new String(ch, start, length);if ("name".equals(flag)) {person.setName(data);}else if ("age".equals(flag)) {person.setAge(Integer.parseInt(data));}}}public void endElement(String uri, String localName, String qName)throws SAXException {if ("person".equals(localName)) {all.add(person);person = null;}flag = null;}}}

 

4.进行单元测试


 


<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="org.lxh.activity"      android:versionCode="1"      android:versionName="1.0">    <application android:icon="@drawable/icon" android:label="@string/app_name">       <uses-library android:name="android.test.runner"/>        <activity android:name=".SaxParseXmlActivity"                  android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application>    <instrumentation android:name="android.test.InstrumentationTestRunner"     android:targetPackage="org.lxh.activity" android:label="TestforMyApp"/>        <uses-sdk android:minSdkVersion="8" />   </manifest> 


 

package org.lxh.activity;import java.io.InputStream;import java.util.Iterator;import java.util.List;import org.lxh.impl.Parse;import org.lxh.vo.Person;import android.test.AndroidTestCase;import android.util.Log;public class Test extends AndroidTestCase{public static final String tag="Test";  public void testShuchu() throws Throwable{  //Log.i(tag, "123");  Parse p=new Parse();  InputStream in=getClass().getClassLoader().getResourceAsStream("persons.xml"); List<Person> all=p.findAll(in);  Log.i(tag, String.valueOf(all.size()));Iterator<Person> it=all.iterator();while(it.hasNext()){Person person=it.next();Log.i(tag, person.toString());}  }}


 

最后来看一下运行效果图,这里最好弄个filter,控制台就没那么乱了。

点击那个绿色的加号就OK了

不知道大家有没有不理解的地方,如果有可以写评论给我。

 

原创粉丝点击