使用Pull 解析XML文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bi_diu1368/article/details/52176226

Android系统已经集成了Pull,所以不用导包。

 

Xml解析:

 public static List<Person> getPersons(InputStream xml) throws Exception {
        List<Person> persons = null;
        Person person = null;
//        获取xml的破解器,有下列两种方法
        //XmlPullParser pullParser = XmlPullParserFactory.newInstance().newPullParser();
        XmlPullParser pullParser = Xml.newPullParser();
//        为破解器设置要解析的数据
        pullParser.setInput(xml, "UTF-8");

//       首先将xmml数据读到字节数组中,,然后一个一个字符读取,判断<?xml version="1.0" encoding="UTF-8" ?>
//        是否符合XML中的某个语法,然后触发相应的事件。
        int envnt = pullParser.getEventType();
        while (envnt != XmlPullParser.END_DOCUMENT) { //调用结束条件
            switch (envnt) {
                case XmlPullParser.START_DOCUMENT:
                    persons = new ArrayList<Person>();
                    break;
                case XmlPullParser.START_TAG:
                    if ("person".equals(pullParser.getName())) {
                        //获取节点的属性值
                        int id = new Integer(pullParser.getAttributeValue(0));
                        person = new Person();
                        person.setId(id);
                    }
                    if ("name".equals(pullParser.getName())) {
                        //获取节点后面的text
                        String name = pullParser.nextText();
                        person.setName(name);
                    }
                    if ("age".equals(pullParser.getName())) {
                        int age = new Integer(pullParser.nextText());
                        person.setAge(age);
                    }
                    break;
                case XmlPullParser.END_TAG:
                    persons.add(person);
                    person = null;
                    break;
            }
            //解析到<?xml version="1.0" encoding="UTF-8" ?>完成之后,解析器不会自动解析,如果想继续解析结点,调用如下方法
            envnt = pullParser.next();
        }

        return persons;
    }

 

测试类:

private static final String TAG = "TestDemo";
public void testPersons() throws Exception{
    InputStream is = this.getClass().getClassLoader().getResourceAsStream("person.xml");
    List<Person> persons  = PersonServace.getPersons(is);
    for(Person p : persons){
        Log.i(TAG,p.toString());
    }
}

 

生成XML文件:

//保存数据到xml文件中
public static void save(List<Person> persons, OutputStream os) throws Exception{
//得到序列化器
    XmlSerializer serializer =  Xml.newSerializer();
    serializer.setOutput(os,"UTF-8");
    //设置输出
    serializer.startDocument("UTF-8",true);
    serializer.startTag(null,"persons");
    //迭代集合,得到每个元素,生成person节点
    for(Person p : persons){
        serializer.startTag(null,"person");
        serializer.attribute(null,"id",p.getId().toString());

        serializer.startTag(null,"name");
        serializer.text(p.getName());
        serializer.endTag(null,"name");

        serializer.startTag(null,"age");
        serializer.text(p.getAge().toString());
        serializer.endTag(null,"age");

        serializer.endTag(null,"person");
    }

    serializer.endTag(null,"persons");
    //结束文档
    serializer.endDocument();

    os.flush();
    os.close();

}

 

测试文件:

public void  testSave() throws Exception{
List<Person> persons = new ArrayList<>();
    persons.add(new Person(19,"yanxi",10));
    File xmlFile = new File(getContext().getFilesDir(),"itcast.xml");
    FileOutputStream fos = new FileOutputStream(xmlFile);
    PersonServace.save(persons,fos);
}

猜你喜欢

转载自blog.csdn.net/bi_diu1368/article/details/52176226
今日推荐