Android学习笔记-XML文件解析(二)

SAX解析是事件驱动,需要为SAX解析器设置一个ContentHandler,下面是使用SAX解析XML的方法:

//SAX解析XML文件
    public List SAXParseToList( InputStream in) throws Exception
    {
        SAXParserFactory factory= SAXParserFactory.newInstance();
        SAXParser parser=factory.newSAXParser();
        MySAXHandler handler=new MySAXHandler();
        parser.parse(in, handler);
        list=handler.getList();
        in.close();
        return list;
    }

SAX的ContentHandler

//SAX ContentHandler
    private class MySAXHandler extends DefaultHandler{
        private List<Person> list;
        private  String tagname;
        Person person;
        public List<Person> getList(){
            return list;
        }
        //遇到新节点
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            tagname=localName;
            if(localName.equals("person"))
            {
                person=new Person();
                person.id=attributes.getValue("id");
            }
        }
        //文档开始
        @Override
        public void startDocument() throws SAXException {
            list=new ArrayList<>();
        }

        //遇到文本信息
        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            String str=new String(ch,start,length);
            if(tagname!=null){
           switch (tagname){
               case "name":
                   person.name=str;
                   break;
               case"age":
                   person.age=Integer.parseInt(str);
                   break;
           }}
        }

        //遇到节点结束标志
        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            if(localName.equals("person")) {
                list.add(person);
                person=null;
            }
            tagname=null;

        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值