android Pull方式解析xml文件
16lz
2021-01-23
xml文件如下:
<?xml version="1.0" encoding="utf-8"?><persons><person id="1"><name>zhangsan</name><age>11</age></person><person id="2"><name>lisi</name><age>18</age></person><person id="3"><name>wangwu</name><age>20</age></person></persons>
解析代码如下:
package com.pdsu.file.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.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import org.xmlpull.v1.XmlSerializer;import android.util.Xml;/** * 采用pull方式解析xml文件 * * @author huangyinge * */public class PersonXML {/** * 读取xml文件 * * @param is * xml文件输入流 * @return person列表 * @throws XmlPullParserException */public List<Person> readXML(InputStream is) throws Exception {List<Person> persons = null;Person person = null;// 得到xmlpull解析器XmlPullParser xmlPull =XmlPullParserFactory.newInstance().newPullParser();xmlPull.setInput(is, "UTF-8");int eventType = xmlPull.getEventType();// 循环遍历每个元素只到文档末尾while (eventType != XmlPullParser.END_DOCUMENT) {switch (eventType) {case XmlPullParser.START_DOCUMENT:// 文档开始,只执行一次persons = new ArrayList<Person>();break;case XmlPullParser.START_TAG: {// 标签开始if ("person".equals(xmlPull.getName())) {int id = Integer.parseInt(xmlPull.getAttributeValue(0));person = new Person();person.setId(id);}if ("name".equals(xmlPull.getName())) {String name = xmlPull.nextText();person.setName(name);}if ("age".equals(xmlPull.getName())) {int age = Integer.parseInt(xmlPull.nextText());person.setAge(age);}break;}case XmlPullParser.END_TAG: {if ("person".equals(xmlPull.getName())) {persons.add(person);person =null;}break;}}eventType = xmlPull.next();}return persons;}/** * 保存xml文件 * @param persons * @throws Exception */public void saveXML(List<Person> persons,OutputStream os) throws Exception{XmlSerializer xmlSerializer = XmlPullParserFactory.newInstance().newSerializer();xmlSerializer.setOutput(os,"UTF-8");xmlSerializer.startDocument("UTF-8", true);xmlSerializer.startTag(null, "persons");for(Person person:persons){xmlSerializer.startTag(null, "person");xmlSerializer.attribute(null, "id", String.valueOf(person.getId()));xmlSerializer.startTag(null, "name");xmlSerializer.text(person.getName());xmlSerializer.endTag(null, "name");xmlSerializer.startTag(null, "age");xmlSerializer.text(String.valueOf(person.getAge()));xmlSerializer.endTag(null, "age");xmlSerializer.endTag(null, "person");}xmlSerializer.endTag(null, "persons");xmlSerializer.endDocument();os.flush();os.close();}}测试类代码:
package com.pdsu.file.xml;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.junit.Test;import android.test.AndroidTestCase;import com.pdsu.file.xml.Person;import com.pdsu.file.xml.PersonXML;public class PersonXMLTest extends AndroidTestCase{@Testpublic void testReadXML() throws Exception{InputStream is = this.getClass().getClassLoader().getResourceAsStream("person.xml");PersonXML personXml = new PersonXML();List<Person> persons = personXml.readXML(is);for(Person person :persons){System.out.println(person);}}@Test public void save() throws Exception{List<Person> persons = new ArrayList<Person>();persons.add(new Person(1,"name1",11));persons.add(new Person(2,"name2",112));persons.add(new Person(3,"name3",113));persons.add(new Person(4,"name4",114));PersonXML personXml = new PersonXML();FileOutputStream fos = new FileOutputStream(getContext().getFilesDir()+File.separator+"person.xml"); personXml.saveXML(persons, fos);}}
更多相关文章
- Android Studio生成APK文件名带上版本号等信息
- Android开源项目源代码分享
- android文件管理器(1)
- 在android中获取文件的MD5值
- android获取assert资源文件
- 如何用代码区分android TV和手机? 适配Android TV ?
- Android Studio 导.so文件简单、高效的方法