首页 > 代码库 > 安卓系列三(使用pull 方式解析xml文件)
安卓系列三(使用pull 方式解析xml文件)
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import android.annotation.SuppressLint;
import android.util.Xml;
import com.example.domain.Person;
/**
* @author wesley
* @version
* @date 2015年1月26日 上午11:32:09
*
*/
public class XmlService {
/**
* 读取数据
* @param xml 要读取的数据
* @return
* @throws Exception
*/
@SuppressLint("UseValueOf")
public static List<Person> readXml(InputStream xml) throws Exception{
List<Person> persons = null;
Person person = null;
//创建一个Pull实例
XmlPullParser pullParser = Xml.newPullParser();
//为Pull解析器设置要解析的XML数据
pullParser.setInput(xml, "UTF-8");
//得到第一个事件
int event = pullParser.getEventType();
//判断是不是文档结束事件
while(event != XmlPullParser.END_DOCUMENT){
switch (event) {
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if("person".equals(pullParser.getName())){
int id = new Integer(pullParser.getAttributeValue(0));
person = new Person();
person.setId(id);
}
if("name".equals(pullParser.getName())){
String name = pullParser.nextText();
person.setName(name);
}
if("age".equals(pullParser.getName())){
int age = new Integer(pullParser.nextText());
person.setAge(age);
}
break;
case XmlPullParser.END_TAG:
if("person".equals(pullParser.getName())){
persons.add(person);
person = null;
}
break;
}
event = pullParser.next();
}
return persons;
}
/**
* 保存数据
* @param persons 数据
* @param out 输入方向
* @throws Exception
*/
public static void saveXml(List<Person> persons,OutputStream out) throws Exception{
//创建一个序列化实例
XmlSerializer serializer = Xml.newSerializer();
//设置输出流
serializer.setOutput(out, "UTF-8");
//设置文档
serializer.startDocument("UTF-8", true);
//设置开始标签
serializer.startTag(null, "persons");
for(Person person : persons){
serializer.startTag(null, "person");
serializer.attribute(null, "id", person.getId().toString());
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(person.getAge().toString());
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
//创建结束标签
serializer.endTag(null, "persons");
//结束文档
serializer.endDocument();
out.flush();
out.close();
}
}
安卓系列三(使用pull 方式解析xml文件)