XML解析

解析Xml

public class ParserUtils {

    public static List<Person> parserXml(InputStream open) {
        ArrayList<Person> list=null;
        Person person=null;
        try {
            XmlPullParser parser = Xml.newPullParser();
            //设置解析者的参数,用open流中进行解析,以utf-8的格式进行解析
            parser.setInput(open, "utf-8");
            //获取事件标签的类型
            int type = parser.getEventType();
            //如果类型为文档的话,
            while(type!=XmlPullParser.END_DOCUMENT){
                String name=parser.getName();
                switch (type) {
                case XmlPullParser.START_TAG:
                    if("persons".equals(name)){
                        list=new ArrayList<Person>();
                    }else if("person".equals(name)){
                        person=new Person();
                    }else if("name".equals(name)){
                        //nextText()就是取两个标签里面的值
                        person.setName(parser.nextText());
                        //如果字段里面有属性,可以通过getAttribute获取
                        person.setPic(parser.getAttributeValue(0));
                    }else if("age".equals(name)){
                        person.setAge(Integer.parseInt(parser.nextText()));
                    }break;
                case XmlPullParser.END_TAG:
                    if("person".equals(name)){
                        list.add(person);
                        System.out.println(person);
                        person=null;
                    }
                    break;
                }
                //让它一直往下走
                type=parser.next();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

}

创建Xml文件

        //通过Xml获取一个XmlSerializer工具
        XmlSerializer serializer = Xml.newSerializer();
        //设置XmlSerializer序列化的参数,主要有输出流,要定义输出的地方,和文件字符格式,是否独立
        try {
            File file=new File(Environment.getExternalStorageDirectory(),"persons.xml");
            FileOutputStream os=new FileOutputStream(file);
            //设置序列化器的参数,这里面的是流的编码
            serializer.setOutput(os, "utf_8");
            //开始xml文档的开头,这里的编码是生成xml文件编码
            serializer.startDocument("utf_8", true);

                //写xml的根节点,namespace 命名空间,没有就写null
                serializer.startTag(null, "persons");

                //循环写person节点
                for (Person p : list) {
                    serializer.startTag(null, "person");

                        //开始写属性节点,name,age
                        serializer.startTag(null, "name");
                            //内容
                            serializer.text(p.getName());

                        serializer.endTag(null, "name");
                        serializer.startTag(null, "age");
                        //内容
                        serializer.text(p.getAge());
                        serializer.endTag(null, "age");
                    serializer.endTag(null, "person");
                }
                serializer.endTag(null, "persons");
                //根节点结尾


            //在写开头的时候就写结尾,不容易忘,也不容易乱
            serializer.endDocument();

        } catch (Exception e) {
            e.printStackTrace();
        }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值