(1)首先我们放一个文件名为beauties.xml的XML文件到assets目录下,文件内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <beauties>
- <beauty>
- <name>范冰冰</name>
- <age>28</age>
- </beauty>
- <beauty>
- <name>杨幂</name>
- <age>23</age>
- </beauty>
- </beauties>
- package com.pulltest;
- public class Beauty {
- //美女姓名
- private String name;
- //美女年龄
- private String age;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getAge() {
- return age;
- }
- public void setAge(String age) {
- this.age = age;
- }
- @Override
- public String toString() {
- return "美女资料 [年龄=" + age + ", 姓名=" + name + "]";
- }
- }
(2)在src目录下写一个接口IBeautyParser,其内容如下:
- package com.pulltest;
- import java.io.InputStream;
- import java.util.List;
- public interface IBeautyParser {
- /**
- *
- * 解析输入流,获取Beauty列表
- * @param is
- * @return
- * @throws Exception
- */
- public List<Beauty> parse(InputStream is) throws Exception;
- /**
- *
- * 序列化Beauty对象集合,得到XML形式的字符串
- * @param beauties
- * @return
- * @throws Exception
- */
- public String serialize(List<Beauty> beauties) throws Exception;
- }
在src目录下写一个上面接口的实现类BeautyParserImpl,其内容如下,代码已经详细注释:
- package com.pulltest;
- import java.io.InputStream;
- import java.util.ArrayList;
- import java.util.List;
- import org.xmlpull.v1.XmlPullParser;
- import android.util.Xml;
- public class BeautyParserImpl implements IBeautyParser{
- @Override
- public List<Beauty> parse(InputStream is) throws Exception {
- List<Beauty> mList = null;
- Beauty beauty = null;
- // 由android.util.Xml创建一个XmlPullParser实例
- XmlPullParser xpp = Xml.newPullParser();
- // 设置输入流 并指明编码方式
- xpp.setInput(is,"UTF-8");
- // 产生第一个事件
- int eventType = xpp.getEventType();
- while (eventType != XmlPullParser.END_DOCUMENT){
- switch (eventType) {
- // 判断当前事件是否为文档开始事件
- case XmlPullParser.START_DOCUMENT:
- mList = new ArrayList<Beauty>(); // 初始化books集合
- break;
- // 判断当前事件是否为标签元素开始事件
- case XmlPullParser.START_TAG:
- if (xpp.getName().equals("beauty")) { // 判断开始标签元素是否是book
- beauty = new Beauty();
- } else if (xpp.getName().equals("name")) {
- eventType = xpp.next();//让解析器指向name属性的值
- // 得到name标签的属性值,并设置beauty的name
- beauty.setName(xpp.getText());
- } else if (xpp.getName().equals("age")) { // 判断开始标签元素是否是book
- eventType = xpp.next();//让解析器指向age属性的值
- // 得到age标签的属性值,并设置beauty的age
- beauty.setAge(xpp.getText());
- }
- break;
- // 判断当前事件是否为标签元素结束事件
- case XmlPullParser.END_TAG:
- if (xpp.getName().equals("beauty")) { // 判断结束标签元素是否是book
- mList.add(beauty); // 将book添加到books集合
- beauty = null;
- }
- break;
- }
- // 进入下一个元素并触发相应事件
- eventType = xpp.next();
- }
- return mList;
- }
- @Override
- public String serialize(List<Beauty> beauties) throws Exception {
- // TODO Auto-generated method stub
- return null;
- }
- }
(3) 在layout目录下新建一个布局文件pulltest.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" >
- <TextView
- android:id="@+id/textView"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" />
- </LinearLayout>
在src目录下的Activity内容如下:
- package com.pulltest;
- import java.io.InputStream;
- import java.util.List;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.TextView;
- import com.example.pulltest.R;
- public class PullTestActivity extends Activity{
- //装载Beauty类型的链表,其内容由XML文件解析得到
- private List<Beauty> beautyList;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.pulltest);
- try {
- //通过assertmanager的open方法获取到beauties.xml文件的输入流
- InputStream is = this.getAssets().open("beauties.xml");
- //初始化自定义的实现类BeautyParserImpl
- BeautyParserImpl pbp = new BeautyParserImpl();
- //调用pbp的parse()方法,将输入流传进去解析,返回的链表结果赋给beautyList
- beautyList = pbp.parse(is);
- } catch (Exception e) {
- e.printStackTrace();
- }
- setupViews();
- }
- /**
- * 将数据显示到手机界面上
- */
- private void setupViews(){
- String result = "";
- for (Beauty b : beautyList) {
- result += b.toString();
- }
- TextView textView = (TextView) findViewById(R.id.textView);
- textView.setText(result);
- }
- }