使用XmlPullParser来解析。
本地xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="123">
<name>Thinking</name>
<age>80</age>
</person>
<person id="234">
<name>Core</name>
<age>90</age>
</person>
<person id="256">
<name>Hello</name>
<age>100</age>
</person>
</persons>
主程序;
package com.itheima.Netxml;
import java.io.InputStream;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;
public class MainActivity extends Activity {
private PersonService service;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
service = new PersonService();
}
public void xml(View v) throws Exception{
try {
InputStream is = getAssets().open("books.xml");
List<Person> persons = service.parseXML(is);
for (Person book : persons) {
Log.i("person", book.toString());
}
} catch (Exception e) {
Log.e("error", e.getMessage());
}
}
public void json(View v){
}
}
定义一个Person类;
package com.itheima.Netxml;
public class Person {
private int id;
private int age;
private String name;
public Person() {
super();
// TODO Auto-generated constructor stub
}
public Person(int id, int age, String name) {
super();
this.id = id;
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Person [id=" + id + ", age=" + age + ", name=" + name + "]";
}
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;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
解析XMl的数据:
package com.itheima.Netxml;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import android.util.Xml;
public class PersonService {
/**
* 通过网络解析xml
* @return
* @throws Exception
*/
public List<Person> getWebPersons() throws Exception {
// TODO Auto-generated method stub
URL url = new URL("");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(3000);
int code = conn.getResponseCode();
if(code == 200){
InputStream in = conn.getInputStream();
return parseXML(in);
}
return null;
}
/**
* 解析方法
* @param in 数据流
* @return
* @throws Exception
*/
public List<Person> parseXML(InputStream in) throws Exception {
// TODO Auto-generated method stub
XmlPullParser parser = Xml.newPullParser();
parser.setInput(in, "UTF-8");
List<Person> list = null;
Person p = null;
for (int type = parser.getEventType(); type != XmlPullParser.END_DOCUMENT; type = parser.next()) {
switch(type){
case XmlPullParser.START_DOCUMENT:
list = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if("person".equals(parser.getName())){
p = new Person();
p.setId(Integer.parseInt(parser.getAttributeValue(0)));
}
else if("name".equals(parser.getName())){
p.setName(parser.nextText());
}
else if("age".equals(parser.getName())){
p.setAge(Integer.parseInt(parser.nextText()));
}
break;
case XmlPullParser.END_TAG:
if("person".equals(parser.getName())){
list.add(p);
p=null;
}
break;
}
}
return list;
}
}