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

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

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

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

            return personList;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e@H_301_101@.printStackTrace();
        }
        return @H_301_101@null;
    }

猜你在找的XML相关文章