您的位置:首页 > 移动开发 > Android开发

android使用pull解析xml

2013-11-07 22:58 495 查看


persons.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>张老师</name>
<age>21</age>
</person>
<person id="20">
<name>李老师</name>
<age>25</age>
</person>
</persons>


test.java

package com.pull.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

import org.xmlpull.v1.XmlPullParserException;

import com.pull.domain.Person;
import com.pull.http.HttpUtils;
import com.pull.parser.PullXMLTools;

public class Test {

public Test() {
// TODO Auto-generated constructor stub
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String path = "http://172.16.47.156:8080/myhttp/persons.xml";
InputStream inputStream = HttpUtils.getXml(path);
String encode = "utf-8";
ArrayList<Person> list = null;
try {
list = PullXMLTools.parseXML(inputStream, encode);
for (Person person : list) {
System.out.println(person.toString());
}
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}


HttpUtils.java

package com.pull.http;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUtils {

public HttpUtils() {
// TODO Auto-generated constructor stub
}

/**
* 从服务器获取xml文件返回流
*
* @param path
* @return
*/
public static InputStream getXml(String path) {
InputStream inputStream = null;
try {
URL url = new URL(path);
if (url != null) {
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setConnectTimeout(3000);
connection.setDoInput(true);
connection.setRequestMethod("GET");
int responseConde = connection.getResponseCode();
if (responseConde == 200) {
inputStream = connection.getInputStream();
}
}
} catch (Exception e) {
// TODO: handle exception
}
return inputStream;
}
}


PullXmlTools.java

package com.pull.parser;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

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

import com.pull.domain.Person;

/**
* 主要是使用PULL解析XML
*
* @author Lulu
*
*/

public class PullXMLTools {

public PullXMLTools() {
// TODO Auto-generated constructor stub
}

/**
*
* @param inputStream
*            从服务器获取xml文件,以流的形式返回
* @param enconde
*            编码格式
* @return
* @throws XmlPullParserException
* @throws IOException
*/
public static ArrayList<Person> parseXML(InputStream inputStream,
String encode) throws XmlPullParserException, IOException {
ArrayList<Person> list = null;
Person person = null; // 装载每一个person解析的内容
// 创建一个xml解析的工厂
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// 获得xml解析类的引用
XmlPullParser parser = factory.newPullParser();
parser.setInput(inputStream, encode);
// 获得事件的类型
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
list = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if ("person".equals(parser.getName())) {
person = new Person();
// 取出属性值
int id = Integer.parseInt(parser.getAttributeValue(0));
person.setId(id);
} else if ("name".equals(parser.getName())) {
String name = parser.nextText(); // 获取该结点的内容
person.setName(name);
} else if ("age".equals(parser.getName())) {
int age = Integer.parseInt(parser.nextText());
person.setAge(age);
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(parser.getName())) {
list.add(person);
person = null;
}
break;
}
eventType = parser.next();
}
return list;
}
}


Person.java

package com.pull.domain;

public class Person {
private int id;
private String name;
private int age;

public Person() {
// TODO Auto-generated constructor stub
}

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 + "]";
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: