通过XmlPullParser解析XML

此文,仅做为个人学习Android,记录成长以及方便复习!

1.通过Myeclipse搭建一个服务器环境,存放一个XML文件

2.访问地址:http://192.168.0.109:8080/JsonDemo/Text.xml

内容如下:


接下来开始正真的表演了!

创建一个类,存放每个<penson>的内容

penson.xml

package com.rui.xmldemo;

/**
 * Created by qqazl001 on 2018/4/24.
 */

public class Penson {
    private String name;
    private String age;
    private String mian;

    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;
    }

    public String getMian() {
        return mian;
    }

    public void setMian(String mian) {
        this.mian = mian;
    }

    @Override
    public String toString() {
        return "Penson{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", mian='" + mian + '\'' +
                '}';
    }
}

创建一个类继承线程,变身牛逼的线程类

通过XmlPullParser解析XML内容并显示在TextView

package com.rui.xmldemo;

import android.os.Handler;
import android.widget.TextView;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;


/**
 * Created by qqazl001 on 2018/4/25.
 */

public class XmlFromUrl extends Thread{
    private String url;
    private Handler handler;
    private TextView textView;

    public XmlFromUrl(String url,Handler handler,TextView textView){
        this.url = url;
        this.handler = handler;
        this.textView = textView;
    }
    @Override
    public void run() {
        super.run();
        try {
            //解析URL为输入流
            URL httpUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection)httpUrl.openConnection();
            conn.setRequestMethod("GET");
            conn.setReadTimeout(5000);
            InputStream is = conn.getInputStream();
           //pull解析基于事件驱动
            //获取工程对象
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            //实例化工厂对象
            XmlPullParser parser = factory.newPullParser();
            //添加输入流,并设置编码
            parser.setInput(is,"UTF-8");
            //获取事件类型
            int event = parser.getEventType();
            //设置集合存放<penson>标签下的penson
            final List<Penson> list  = new ArrayList<Penson>();
            Penson penson = null;
            //根据事件类型处理
            //文档结束位置END_DOCUMENT
            while(event!=XmlPullParser.END_DOCUMENT){
                //获取标签名
                String data = parser.getName();
                //根据事件类型判断处理
                switch(event){
                    case XmlPullParser.START_TAG:
                        //如果是起始标签<penson>则实例化
                        if("penson".equals(data)){
                            penson = new Penson();
                        }
                        //如果是<penson>下的标签则赋值
                        if("name".equals(data)){
                            penson.setName(parser.nextText());
                        }
                        if("age".equals(data)){
                            penson.setAge(parser.nextText());
                        }
                        if("main".equals(data)){
                            penson.setMian(parser.nextText());
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        //遇到结束标签则把penson添加到list
                        if("penson".equals(data)){
                            list.add(penson);
                        }
                        break;
                }
                //开始下一次循环
                event = parser.next();
            }
            //list内容显示到文本
            handler.post(new Runnable() {
                @Override
                public void run() {
                    textView.setText(list.toString());
                }
            });
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        }
    }
}

最后当然得到Maintivity.java 去调用我们的线程类才能功德圆满了

package com.rui.xmldemo;

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private TextView tv;
    private Handler handler = new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = findViewById(R.id.tv1);
        String url = "http://192.168.0.109:8080/JsonDemo/Text.xml";
          XmlFromUrl xmlFromUrl = new XmlFromUrl(url,handler,tv);
          xmlFromUrl.start();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值