XML的解析和生成

来源:互联网 发布:toyama钢琴如何 知乎 编辑:程序博客网 时间:2024/06/10 10:45
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();} }

原创粉丝点击