Android-PullParser解析xml文件

本文介绍了如何在MyEclipse的Android项目中使用PullParser解析XML文件,将XML内容展示在Logcat中。首先创建Web Project项目MyAndroid,然后在WebRoot下创建persons.xml。解析过程涉及对XML文件的读取和处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标效果:

MyEclipse中一个项目的xml文件,经过解析显示到eclipse的logcat日志中。


1.打开MyEclipse,新建Web Project项目MyAndroid,并且在根目录WebRoot下新建persons.xml页面。

persons.xml页面:

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


2.运行MyAndroid项目。


3.eclipse中创建Android项目。


4.新建Person实体类,与xml文件中的标签相对应。
Person.java页面:
package com.example.pullparsertest.entity;

public class Person {
    private int id;
    private String name;
    private int age;
    
	public Person() {
		super();
	}
	public Person(int id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = 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 + "]";
	}
}


5.新建PersonDao类,用于对标签进行解析。
PersonDao.java页面:
package com.example.pullparsertest.dao;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

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

import android.util.Log;

import com.example.pullparsertest.entity.Person;

public class PersonDao {
   public List<Person> getPersons(String response){
	   List<Person> persons=null;
	   try {
			XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
			XmlPullParser xmlPullParser = factory.newPullParser();
			xmlPullParser.setInput(new StringReader(response));    //获取数据源
			int eventType = xmlPullParser.getEventType();      //获取事件类型
			int id = 0;
			String name = "";
			int age = 0;
			Person person = null;
			while (eventType != XmlPullParser.END_DOCUMENT) {
				String nodeName = xmlPullParser.getName();      //当前读到的标签
				switch (eventType) {
				// 开始解析整个文档
				case XmlPullParser.START_DOCUMENT:
					persons = new ArrayList<Person>();
					break;
				// 开始解析某个结点
				case XmlPullParser.START_TAG: {       //读取某个标签
					if ("person".equals(nodeName)) {
						person = new Person();        //实例化person
						id = Integer.parseInt(xmlPullParser
								.getAttributeValue(0));
						person.setId(id);            //封装peron对象的id属性
					} else if ("name".equals(nodeName)) {
						name = xmlPullParser.nextText();     //通过nextText获取文本节点值
						person.setName(name);        //封装name
					} else if ("age".equals(nodeName)) {
						age = Integer.parseInt(xmlPullParser.nextText());
						person.setAge(age);
					}

					break;
				}
				// 完成解析某个结点
				case XmlPullParser.END_TAG: {
					if ("person".equals(nodeName)) {
						persons.add(person);      //读完一个person,将其添加到集合
						person = null;
						Log.i("MainActivity", "id is " + id);
						Log.i("MainActivity", "name is " + name);
						Log.i("MainActivity", "age is " + age);
					}
					break;
				}
				default:
					break;
				}
				eventType = xmlPullParser.next();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	   
	   return persons;
   }
} 


6.MainActivity.java页面连接资源并获取数据。
MainActivity.java页面:
package com.example.pullparsertest;

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

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import com.example.pullparsertest.dao.PersonDao;
import com.example.pullparsertest.entity.Person;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sendRequestWithHttpURLConnection();
    }

    protected void sendRequestWithHttpURLConnection() {
		new Thread(){
			@Override
			public void run() {
				URL url;
				HttpURLConnection connection=null;   //访问请求
				try {
					url=new URL("http://192.168.137.1:8080/MyAndroid/persons.xml");     //访问地址
					connection = (HttpURLConnection) url.openConnection();    //获取到connection实例
					connection.setRequestMethod("GET");       //请求所使用的方法,GET希望从服务器那里获取数据,POST希望提交数据给服务器
					connection.setConnectTimeout(8000);      //设置连接毫秒数
					connection.setReadTimeout(8000);         //设置读取超时的毫秒数
					InputStream in = connection.getInputStream();      //获取到服务器返回的输入流
					// 下面对获取到的输入流进行读取
					BufferedReader reader = new BufferedReader(new InputStreamReader(in));
					StringBuilder response = new StringBuilder();
					String line;
					while ((line = reader.readLine()) != null) {
						response.append(line);
					}   
					Log.i("MainActivity","response="+response);
					PersonDao personDao=new PersonDao();
					personDao.getPersons(response.toString());
					
					
				} catch (MalformedURLException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}finally {
					if (connection != null) {
						connection.disconnect();
					}
				}
			}
		}.start();
			
	}
    
}


7.AndroidManifest.xml页面添加网络访问权限,可以在Permissions进行选择,也可以使用代码方式添加。
</manifest>标签上方:
<uses-permission android:name="android.permission.INTERNET"/>


8.activity_main.xml页面不做处理。


9.要注意的是,获取连接时定义的url路径,标准格式为“http://电脑ip地址:8080/项目名称/xml文件名称”,当使用真机测试时,必须保证手机和电脑的网络相互连接,可以电脑开wifi手机连接上,使用这个网络的ip地址。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值