首先
准备一个供解析的xml文件,这里我们假定要解析的文件名称为person.xml,文件的具体内容为:
<?xml version="1.0" encoding="utf-8"?> <persons> <person id="23"> <name>liming</name> <age>23</age> </person> </persons>
接下来写一个person的JavaBean:
package com.yangzi.domain; public class Person { private int id; private String name; private int 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; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
然后
是业务类的编写:
package com.yangzi.service; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import android.util.Xml; import com.yangzi.domain.Person; public class PersonService { public static List<Person> getPersons(InputStream xml) throws Exception { List<Person> persons = null; Person person = null; //得到xmlpull解析器 XmlPullParser pullParser = Xml.newPullParser(); //設置解析器要解析的内容,和编码方式 pullParser.setInput(xml,"utf-8"); //循环读取xml文件的节点 int event = pullParser.getEventType();//得到xml文件中的一个节点 while(event != XmlPullParser.END_DOCUMENT){ switch (event) { //xml文件开始节点,开始节点一般做数据的初始化 case XmlPullParser.START_DOCUMENT: persons = new ArrayList<Person>(); break; //若为开始节点 case XmlPullParser.START_TAG: //若为person节点 if("person".equals(pullParser.getName())){ //得到id person = new Person(); //int id = Integer.parseInt(pullParser.getAttributeValue(0)); //int id = new Integer(pullParser.getAttributeValue(0)); int id = Integer.valueOf(pullParser.getAttributeValue(0)); person.setId(id); } //若为名字节点 if("name".equals(pullParser.getName())){ String name = pullParser.nextText(); person.setName(name); } //若为年龄节点 if("age".equals(pullParser.getName())){ //int age = Integer.parseInt(pullParser.nextText()); //int age = new Integer(pullParser.nextText()); int age = Integer.valueOf(pullParser.nextText()); person.setAge(age); } break; case XmlPullParser.END_TAG: if("person".equals(pullParser.getName())){ persons.add(person); person = null; } break; } event = pullParser.next();//读取下一个节点 } return persons; } }
接下来
就可以写测试类对其进行测试了:
package com.yangzi.test; import java.io.InputStream; import java.util.List; import android.test.AndroidTestCase; import android.util.Log; import com.yangzi.domain.Person; import com.yangzi.service.PersonService; public class PersonServiceTest extends AndroidTestCase { private static final String TAG = "PersonServiceTest"; public void testPersons() throws Exception{ InputStream in = this.getClass().getClassLoader().getResourceAsStream("person.xml"); List<Person> persons = PersonService.getPersons(in); for(Person per:persons){ Log.i(TAG, per.toString()); } } }
在测试之前
要在项目清单文件中引入测试环境:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application> ..... <uses-library android:name="android.test.runner" /><!--注意放置的位置--> .... </application> .... <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.yangzi.xml" /><!--注意放置的位置--> </manifest>
ok,点击testPersons方法,运行为Android Junit Test试试吧!
体会
根据业务类PersonService 的分析代码,可以看出,在xml文件中的并没有进行操作,可以任意命名,也就是说,在解析xml文件时可以直接提取自己想要的就行了,其他的不用操作。
自己的想法,不知道对否,请大神指正啊!