安卓xml文档解析

2014-12-27   14:53:32


解析xml文档用xml文档存储数据

1、获得文件的路径

1
File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");

2、建立文件输出流

1
FileInputStream fis = new FileInputStream(path);

3、获得xml文档解析器对象

1
XmlPullParser parser=Xml.newPullParser();

4、指定解析的文件和编码格式

  1. parser.setInput(fis,"utf-8");

5、获得事件类型

1
int eventType=parser.getEventType();

6、将解析xml后的结果存贮在javaBean中

1

List<Person> personList=null;

Person person=null;

7、开始解析xml文档

  1. //(api解释:Logical end of the xml document.到达xml文档的结尾)
  2. while(eventType != XmlPullParser.END_DOCUMENT) {
  3. // 获得当前节点的名称
  4. String tagName = parser.getName();
  5. switch (eventType) {
  6. // 当前等于开始节点 <person>
  7. case XmlPullParser.START_TAG:
  8. if("persons".equals(tagName)) { // <persons>
  9. personList = new ArrayList<Person>();
  10. } else if("person".equals(tagName)) { // <person id="1">
  11. person = new Person();
  12. id = parser.getAttributeValue(null, "id");
  13. person.setId(Integer.valueOf(id));
  14. } else if("name".equals(tagName)) { // <name>
  15. person.setName(parser.nextText());
  16. } else if("age".equals(tagName)) { // <age>
  17. person.setAge(Integer.parseInt(parser.nextText()));
  18. }
  19. break;
  20. case XmlPullParser.END_TAG: // </persons>
  21. if("person".equals(tagName)) {
  22. // 需要把上面设置好值的person对象添加到集合中
  23. personList.add(person);
  24. }
  25. break;
  26. default:
  27. break;
  28. }
  29. // 获得下一个事件类型
  30. eventType = parser.next();
  31. }


  1. public void test() {
  2. // writeXmlToLocal();
  3. List<Person> personList = parserXmlFromLocal();
  4. for (Person person : personList) {
  5. Log.i("TestCase", person.toString());
  6. }
  7. }

1、获得带储存的数据

1
List<Person> personList=getPersonList();

2、序列化对象(对象序列化就是将对象存储在本地)

1
XmlSerializer serializer=Xml.newSerializer();

3、获得xml文件的路径

1
File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");

4、建立输入流

1
FileOutputStream fos = new FileOutputStream(path);

5、指定序列化对象的输出位置和编码

1
serializer.setOutput(fos, "utf-8");

6、注:startDocument(String encoding, Boolean standalone)

1
serializer.startDocument("utf-8", true);

写开始 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>

7、设置跟标签

1
serializer.startTag(null, "persons");       // <persons>

8、开始将数据写入xml文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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()));//注:如果是有(数字+"")这种每次都要建立一个StringBuffer很消耗性能和时间
                serializer.endTag(null, "age");     // </age>
                 
                serializer.endTag(null, "person");  // </person>
            }
             
            serializer.endTag(null, "persons");         // </persons>
             
            serializer.endDocument();       // 结束
        } 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;
    }
     
    








posted @ 2015-01-01 22:30  就不呵呵呵  阅读(307)  评论(0编辑  收藏  举报