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(); } }
时间: 2024-12-25 00:52:23