使用pull解析xml

前端之家收集整理的这篇文章主要介绍了使用pull解析xml前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

4.5使用pull解析XML文件
4.5.1使用序列化生成xml

/** * 写xml文件到本地 */
private void writeXmlToLocal(){
    List<Person> personList = getPersonList();
    //获取序列化对象
    XmlSerializer serializer = Xml.newSerializer();
    try {
        File path = new File(Environment.getExternalStorageDirectory(),"person.xml");
        FileOutputStream fos = new FileOutputStream(path);

        //指定序列化对象输出的位置和编码
        serializer.setOutput(fos,"utf-8");
        serializer.startDocument("utf-8",true);//写开始信息<?xml version="1.0" encoding="utf-8" standalone="true"?>
        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");
            serializer.text(person.getName());
            serializer.endTag(null,"name");
            //写年龄
            serializer.startTag(null,"age");
            serializer.text(String.valueOf(person.getAge()));
            serializer.endTag(null,"age");

            serializer.endTag(null,"person");//</person>
        }

        serializer.endTag(null,"persons");//</persons>
        serializer.endDocument();//结束
    } catch (Exception e) {
        // TODO: handle exception
    }
}

4.5.2使用pull解析xml

有些时候,我们需要生成一个XML文件生成XML文件方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器。

下面是本例子要解析的XML文件

private List<Person> parseXmlFromLocal(){
        try {
            File path = new File(Environment.getExternalStorageDirectory(),"person.xml");
            FileInputStream fis = new FileInputStream(path);
            //获得pull解析器对象
            XmlPullParser parser = Xml.newPullParser();
            //指定解析的文件和编码格式
            parser.setInput(fis,"utf-8");
            //获得事件类型
            int eventType = parser.getEventType();
            List<Person> personList = null;
            Person person = null;
            while(eventType!=XmlPullParser.END_DOCUMENT){
                String tagName = parser.getName();
                switch (eventType) {
                case XmlPullParser.START_TAG:
                    if("persons".equals(tagName)){
                        personList = new ArrayList<Person>();
                    }else if("person".equals(tagName)){
                        person = new Person();
                        person.setId(Integer.parseInt(parser.getAttributeValue(null,"id")));

                    }else if("name".equals(tagName)){
                        person.setName(parser.nextText());
                    }else if("age".equals(tagName)){
                        person.setAge(Integer.parseInt(parser.nextText()));
                    }
                    break;

                case XmlPullParser.END_TAG:
                    if("person".equals(tagName)){
                        //需要把上面设置好的person对象添加到集合中
                        personList.add(person);
                    }

                default:
                    break;
                }
                eventType = parser.next();//获取下一个时间类型
            }

            return personList;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
原文链接:https://www.f2er.com/xml/296838.html

猜你在找的XML相关文章