Pull解析器解析xml(Android)

来源:互联网 发布:索尼as200 软件 编辑:程序博客网 时间:2024/05/19 02:27

Pull解析器

xml解析器有很多种,常见的有Jdom,dom4j等,pull解析xml为android系统所用到的解析器,是android自带的解析器。它的解析方式与SAX类似。

   在src下新建person.xml文件,再依次建立类似以下的目录包

 

   JavaBean的Person.java的代码如下:

package com.domain;public class Person {private Integer id;private String name;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return this.id + ":" + this.name + ":" + this.age;}}
Service.java的代码:

 

package com.server;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import android.util.Xml;import com.domain.Person;public class Service {public static List<Person> getPersons(InputStream xml) throws Exception {List<Person> persons = new ArrayList<Person>();Person person = null;// 生成Pull解析器的构造器XmlPullParser pullParser = Xml.newPullParser();// 传入需要解析的文件pullParser.setInput(xml, "UTF-8");int event = pullParser.getEventType(); // 获取pull的事件,标识为数字while (event != XmlPullParser.END_DOCUMENT) { // 开始解析的xml文件的头信息<?xml....?>if (event == XmlPullParser.START_TAG) { // 开始的元素节点,<persons>if ("person".equals(pullParser.getName())) {person = new Person();int id = Integer.parseInt(pullParser.getAttributeValue(0));person.setId(id);} else if ("name".equals(pullParser.getName())) {String name = pullParser.nextText();person.setName(name);} else if ("age".equals(pullParser.getName())) {int age = Integer.parseInt(pullParser.nextText());person.setAge(age);}}if (event == XmlPullParser.END_TAG) { // 结束事件,</persons>if ("person".equals(pullParser.getName())) {persons.add(person);person = null;}}event = pullParser.next(); // 进入下一个节点,事件}return persons;}}

person.xml的结构:

 

<?xml version="1.0" encoding="UTF-8"?><persons>    <person id="20">        <name>zhangsan</name>        <age>16</age>    </person>    <person id="21">        <name>lisi</name>        <age>20</age>    </person></persons>

加入测试所需要的两段配置代码:

   

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.xml"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="17" />    <instrumentation        android:name="android.test.InstrumentationTestRunner"        android:targetPackage="com.xml" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <uses-library android:name="android.test.runner" />        <activity            android:name="com.xml.MainActivity"            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></manifest>

增加测试类:

  

package com.test;import java.io.InputStream;import java.util.List;import android.test.AndroidTestCase;import android.util.Log;import com.domain.Person;import com.server.Service;public class ServiceTest extends AndroidTestCase {private final static String TAG = "ServiceTest";public void testPerson() throws Exception {InputStream xml = this.getClass().getClassLoader().getResourceAsStream("person.xml");List<Person> persons = Service.getPersons(xml);for (Person person : persons) {Log.i(TAG, person.toString());}}}

测试结果在 LogCat中查看,结果如下:

 


 

 

   

    

原创粉丝点击