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中查看,结果如下:
- Android XML解析器 - PUll
- Android XML解析(Pull解析器)
- android 解析XML pull解析器
- android pull解析器解析xml
- android利用pull解析器解析xml
- Pull解析器解析xml(Android)
- Android Pull解析xml
- android pull 解析xml
- android PULL 解析XML
- Android Pull解析xml
- Android Pull 解析 XML
- Android Pull 解析 XML
- Android Pull解析xml
- Android PULL解析XML
- Android Pull解析xml
- Android PULL解析XML
- android xml-----Pull解析
- android pull解析xml
- jquery遍历之parent()与parents()的区别 及 parentsUntil() 方法
- web.xml 中的listener、 filter、servlet 加载顺序及其详解
- 设计模式之结构模式
- unity自动保存项目
- 通用Dao 设计 2
- Pull解析器解析xml(Android)
- TCP详解----多路复用与多路分解(一)
- 1727. Znaika's Magic Numbers
- Java中的关键字
- 并发程序设计-java.util.concurrent介绍
- vs2003迁移到vs2010
- 命题空间的全局变量不能直接拖到Watch窗口查看
- hdu1065-I Think I Need a Houseboat
- LogBack配置及注意事项