xml解析的pull解析示例

40 篇文章 0 订阅

xml文件

<?xml version="1.0" encoding="UTF-8"?>
<persons>
      
    <person id="23">
            
        <name>李明</name>
            
        <age>30</age>
          
    </person>
      
    <person id="20">
            
        <name>李向梅</name>
            
        <age>25</age>
          
    </person>
</persons>

pull解析代码

  private ArrayList<Person> xmlParser() {
        ArrayList<Person> list = null;
        //xml的pull解析
        try {
            XmlPullParser pullParser = Xml.newPullParser();
            pullParser.setInput(getAssets().open("config.xml"), "utf-8");
            int eventType = pullParser.getEventType();
            Person p = null;
            while (eventType != XmlPullParser.END_DOCUMENT) {
                switch (eventType) {
                    case XmlPullParser.START_DOCUMENT:
                        Log.i(TAG, "--开始解析");
                        list = new ArrayList<>();
                        break;
                    case XmlPullParser.START_TAG:
                        if ("person".equals(pullParser.getName())) {
                            p = new Person();
                            p.setId(Integer.parseInt(pullParser.getAttributeValue(0)));
                        } else {
                            if ("name".equals(pullParser.getName())) {
                                p.setName(pullParser.nextText());
                            }
//                            else if ("age".equals(pullParser.getName())) {
//                                p.setAge(Integer.parseInt(pullParser.nextText()));
//                            }
                        }
                        //pullParser.nextText()方法会获取当前节点的值并跳过节点的end位置,
                        break;
                    case XmlPullParser.END_TAG:
                        Log.i(TAG, "--解析完成一个节点" + pullParser.getName());
                        if ("person".equals(pullParser.getName())) {
                            list.add(p);
                            p = null;
                        }
                        break;
                }
                eventType = pullParser.next();
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list;
    }



参考:点击打开链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值