Android下使用pull解析器生成XML文件、读取XML文件

来源:互联网 发布:先导爱知见新导刻小说 编辑:程序博客网 时间:2024/06/11 04:15

Android下使用Pull解析器1,Pull解析器的运行方式与SAX解析器相似。它提供了类似的事件,如:开始元素和结束元素事件。2,使用parser.next()可以进入下一个元素并触发相应事件。3,事件将作为一个int数值被发送,因此可以使用一个switch对相应的事件进行处理。4,当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。5,相关API:获得当前节点事件类型:parser.getEventType();获得下一节点事件类型:parser.next();获取标签名:    parser.getName()获得标签属性值:     parser.getAttributeValue();获得下一个Text类型节点的值:parser.nextText();例子:<?xml version="1.0" encoding="UTF-8"?><persons><person id=“18"><name>allen</name><age>36</age></person><person id=“28"><name>james</name><age>25</age></person></persons>// 使用Pull解析器生成XML文件,并写到本地private void writeXmlToLocal() {List<Person> personList = getPersonList();// 获得序列化对象XmlSerializer serializer = Xml.newSerializer();//XmlSerializer serializer = XmlPullParserFactory.newInstance().newSerializer();try {File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");FileOutputStream fos = new FileOutputStream(path);// 指定序列化对象输出的位置和编码serializer.setOutput(fos, "utf-8");// 写开始 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>serializer.startDocument("utf-8", true);serializer.startTag(null, "persons");// <persons>for (Person person : personList) {// 开始写personserializer.startTag(null, "person");// <person>serializer.attribute(null, "id", String.valueOf(person.getId()));// 写person的nameserializer.startTag(null, "name");// <name>serializer.text(person.getName());serializer.endTag(null, "name");// </name>// 写person的ageserializer.startTag(null, "age");// <age>serializer.text(String.valueOf(person.getAge()));serializer.endTag(null, "age");// </age>serializer.endTag(null, "person");// </person>}serializer.endTag(null, "persons");// </persons>serializer.endDocument();// 结束} catch (Exception e) {e.printStackTrace();}}// 使用Pull解析器读取本地的XML文件private List<Person> parserXmlFromLocal() {try {File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");FileInputStream fis = new FileInputStream(path);// 获得pull解析器对象XmlPullParser parser = Xml.newPullParser();//XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser(); // 指定解析的文件和编码格式parser.setInput(fis, "utf-8");// 获得事件类型int eventType = parser.getEventType();List<Person> personList = null;Person person = null;String id;while(eventType != XmlPullParser.END_DOCUMENT) {// 获得当前节点的名称String tagName = parser.getName();switch (eventType) {case XmlPullParser.START_TAG: // 当前等于开始节点  <person>if("persons".equals(tagName)) {// <persons>personList = new ArrayList<Person>();} else if("person".equals(tagName)) { // <person id="1">person = new Person();id = parser.getAttributeValue(null, "id");person.setId(Integer.valueOf(id));} else if("name".equals(tagName)) { // <name>person.setName(parser.nextText());} else if("age".equals(tagName)) { // <age>person.setAge(Integer.parseInt(parser.nextText()));}break;case XmlPullParser.END_TAG:// </persons>if("person".equals(tagName)) {// 需要把上面设置好值的person对象添加到集合中personList.add(person);}break;default:break;}// 获得下一个事件类型eventType = parser.next();}return personList;} catch (Exception e) {e.printStackTrace();}return null;}}



0 0
原创粉丝点击