xml解析和序列化

来源:互联网 发布:html标签保存到数据库 编辑:程序博客网 时间:2024/05/22 04:53

1.      读写SD卡,加权限;

<?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>

.写xml文件到本地

public class TestCase extends AndroidTestCase {public void test() {//writeXmlToLocal();List<Person> personList = parserXmlFromLocal();for (Person person : personList) {Log.i("TestCase", person.toString());}}/** * 写xml文件到本地 */private void writeXmlToLocal() {List<Person> personList = getPersonList();  //得到数据// 获得序列化对象XmlSerializer serializer = Xml.newSerializer();try {                        //SD卡下//persons.xmlFile path = new File(Environment.getExternalStorageDirectory(), "persons.xml");FileOutputStream fos = new FileOutputStream(path);// 指定序列化对象输出的位置和编码serializer.setOutput(fos, "utf-8");serializer.startDocument("utf-8", true);// 写开始 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>serializer.startTag(null, "persons");// 开始节点<persons>for (Person person : personList) {// 开始写人serializer.startTag(null, "person");// <person>serializer.attribute(null, "id", String.valueOf(person.getId()));//写节点属性// 写名字serializer.startTag(null, "name");// <name>serializer.text(person.getName());serializer.endTag(null, "name");// </name>// 写年龄serializer.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();// serializer.startDocument("utf-8", true)的结束} catch (Exception e) {e.printStackTrace();}}//返回数据private List<Person> getPersonList() {                           List<Person> personList = new ArrayList<Person>();for (int i = 0; i < 30; i++) {personList.add(new Person(i, "wang" + i, 18 + i));}return personList;}

 <?xml version="1.0" encoding="UTF-8"?><persons>  <!--走到这里,创建一个list对象—><person id=“18">   <!--走到这里,创建一个person对象--><name>allen</name> <!--走到这里,set到person对象中—><age>36</age>      <!--走到这里,set到person对象中—></person>  <!—走到这里,add到list对象中--><person id=“28"><name>james</name><age>25</age></person></persons>

解析XML

private List<Person> parserXmlFromLocal() {try {File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");FileInputStream fis = new FileInputStream(path);// 获得pull解析器对象XmlPullParser parser = Xml.newPullParser();// 指定解析的文件和编码格式parser.setInput(fis, "utf-8");//由sax演变来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>,<person id="1">person = new Person();id = parser.getAttributeValue(null, "id");//获得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