1,
package com.service; 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.XmlPullParserFactory; import org.xmlpull.v1.XmlSerializer; import android.util.Xml; import com.model.Person; /** * 解析基类 * @author HJ * */ public class BaseParser { /** Pull解析器解析XML文件数据 * @param xml 待解析数据以InputStream方式传入 * @return * @throws Exception */ public List<Person> getPersons(InputStream xml)throws Exception{ List<Person> persons = null; Person person = null; XmlPullParser pull = Xml.newPullParser(); //XmlPullParser pull = XmlPullParserFactory.newInstance().newPullParser(); //通过XMLPullParserFactory工厂类获取Pull解析器 pull.setInput(xml, "UTF-8");//为pull解析器设置需要解析的xml数据 int event = pull.getEventType(); while(event!=XmlPullParser.END_DOCUMENT){ switch (event) { case XmlPullParser.START_DOCUMENT: persons = new ArrayList<Person>(); break; case XmlPullParser.START_TAG: if ("person".equals(pull.getName())) { person = new Person(); String IDcard = pull.getAttributeValue(0); person.setIDCard(IDcard); } if ("name".equals(pull.getName())) { String name = pull.nextText(); person.setName(name); } if ("sex".equals(pull.getName())) { String sex = pull.nextText(); person.setSex(sex); } if ("address".equals(pull.getName())) { String address = pull.nextText(); person.setAddress(address); } break; case XmlPullParser.END_TAG: if ("person".equals(pull.getName())) { persons.add(person); person = null; } break; } event = pull.next(); } return persons; } /** * 对象方式保存数据到XML文件 * @param persons 待保存数据集合 * @param out 输出流 * @throws Exception */ public void saveToXML(List<Person> persons,OutputStream out)throws Exception{ XmlSerializer serializer = Xml.newSerializer(); serializer.setOutput(out, "UTF-8"); serializer.startDocument("UTF-8", true); serializer.startTag(null, "persons"); for(Person person:persons){ serializer.startTag(null,"person"); serializer.attribute(null,"IDCard", person.getIDCard()); //name 节点 serializer.startTag(null,"name"); serializer.text(person.getName()); serializer.endTag(null, "name"); //sex 节点 serializer.startTag(null, "sex"); serializer.text(person.getSex()); serializer.endTag(null, "sex"); //address 节点 serializer.startTag(null, "address"); serializer.text(person.getAddress()); serializer.endTag(null, "address"); serializer.endTag(null, "person"); } serializer.endTag(null,"persons"); serializer.endDocument(); out.flush(); out.close(); } // }
2,persons.xml
<?xml version="1.0" encoding="UTF-8"?> <persons> <person IDcard="215x"> <name>Mr.Chiang</name> <sex>Gentleman</sex> <address>China</address> </person> <person IDcard="9527"> <name>Mrs.Chen</name> <sex>Lady</sex> <address>France</address> </person> </persons>
3,测试类
package com.emolay.test; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.util.List; import com.model.Person; import com.service.BaseParser; import android.test.AndroidTestCase; import android.util.Log; public class BaseParserTest extends AndroidTestCase { private static final String TAG = "BaseParserTest"; /** * test getPersons method * * @throws Exception */ public void testGetPersons() throws Exception { InputStream xml = this.getClass().getClassLoader() .getResourceAsStream("persons.xml"); BaseParser baseParser = new BaseParser(); List<Person> persons = baseParser.getPersons(xml); for (Person p : persons) { Log.i(TAG, p.getIDCard()); } } /** * test saveToXML method * * @throws Exception */ public void testSaveToXML() throws Exception { InputStream xml = this.getClass().getClassLoader() .getResourceAsStream("persons.xml"); BaseParser baseParser = new BaseParser(); List<Person> persons = baseParser.getPersons(xml); File fileXML = new File(getContext().getFilesDir(), "NewPersons.xml"); FileOutputStream out = new FileOutputStream(fileXML); baseParser.saveToXML(persons, out); } }