加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用pull解析xml

发布时间:2020-12-16 06:21:23 所属栏目:百科 来源:网络整理
导读:4.5使用pull解析XML文件 4.5.1使用序列化生成xml /** * 写xml文件到本地 */ private void writeXmlToLocal (){ ListPerson personList = getPersonList(); //获取序列化对象 XmlSerializer serializer = Xml.newSerializer(); try { File path = new File(En

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;
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读