package com.service;
// 错误总结:在switch语句里面没有break,造成了错误
// 利用pull解析器解析XML
// 步骤:
// 1,声明一个null的List集合
// 2,声明一个null的person
// 3,利用Xml类建立一个XmlPullParser类的对象parse
// 4,为此解析器设置要接卸的对象及字符集编码
// 5,利用parser.getEventType()得到当前解析的对象的类型返回值是一个整型
// 6,核心的一步。利用此整型进行while循环,循环条件:不是document的结尾
// 在while里采用的是switch()语句
//
// 知识点:
// 利用parse.getName()来返回当前指向的标签的名字
// 利用parser.getAttributeValue()得到当前标签的属性值
// 利用parser.nextText()得到当前标签的文本值(相当于文本节点的值)。不是parser.getText()
// 利用event = parser.next();将指针下移
// 利用XmlPullParser的静态常量来判断当前读的是什么
// 将list里的数据写入到XML文档,该方法的参数是OutputStream和List,返回值为空
// 主要是利用了XmlSerializer类的对象
// 步骤:
// 1,建立XmlSerializer类的对象
// 2,为此XmlSerializer对象设置输出流
// 3,开始将list里的数据封装到XML
// 注意:xml里的标签都是一对一对(即开始和结尾)出现的
// 4,关闭流
//
// 主要的知识点:
// serializer.startDocument()/serializer.endDocument();开始/结束一个document
// serializer.startTag()/serializer.endTag()开启/结束一个标签
// serializer.attribute()给一个标签设置属性值
// serializer.text()给一个文本节点设置值
//
// 总结:
// XmlPullParser parse
// XmlSerializer serializer都是通过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.util.Xml;
import com.domain.Person;
public class XmlService {
//利用XmlPullParser解析XML
//将XML的数据封装到实体,然后放到一个集合中返回
public List<Person> getXML(InputStream xml) throws Exception{
ArrayList<Person> persons=null;
Person person=null;
XmlPullParser parser=Xml.newPullParser();
parser.setInput(xml, "UTF-8");
int event=parser.getEventType();
while(event!=XmlPullParser.END_DOCUMENT){
switch (event) {
case XmlPullParser.START_DOCUMENT:
persons=new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if("person".equals(parser.getName())){
person=new Person();
String id=parser.getAttributeValue(0);
person.setId(Integer.valueOf(id));
}
if("name".equals(parser.getName())&&person!=null){
String name=parser.nextText();//注意不是getText();
person.setName(name);
}else if("age".equals(parser.getName())&&person!=null){
String age=parser.nextText();//注意不是getText();
person.setAge(Short.valueOf(age));
}
break;
case XmlPullParser.END_TAG:
if("person".equals(parser.getName())){
persons.add(person);
person=null;
}
break;
}
event=parser.next();
}
return persons;
}
//将List<Person>里的数据放到XML文件中
public void saveXML(OutputStream outputStream,List<Person> persons) throws Exception{
XmlSerializer serializer=Xml.newSerializer();//也是通过Xml得到的
serializer.setOutput(outputStream, "UTF-8");
serializer.startDocument("UTF-8", null);
serializer.startTag(null, "persons");
for(Person person:persons){
serializer.startTag(null, "person");
serializer.attribute(null, "id", String.valueOf(person.getId()));
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(String.valueOf(person.getAge()));
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endTag(null, "persons");
serializer.endDocument();
}
}