SAX解析和PULL解析

pull解析

//bean里封装id,name,sex,age

List<bean> list=new ArrayList<bean>();
    private String tagname;
    private bean be;
    private ListView lv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        pullxml();
        lv=(ListView)findViewById(R.id.lv);
        ArrayAdapter<bean> ad=new ArrayAdapter<bean>(MainActivity.this, android.R.layout.simple_list_item_1, list);
        lv.setAdapter(ad);
    }
    public void pullxml(){
        // 1  得到pull解析器
        XmlPullParser parser=Xml.newPullParser();
        try {
            // 2  加载需要解析的文档
            parser.setInput(getAssets().open("data.xml"),"utf-8");
            // 3  开始读取文档
            int type=parser.getEventType();
            //如果文档读取没有读到结束标签,循环读取文档里的内容
            while(type!=XmlPullParser.END_DOCUMENT){
                switch (type) {
                case XmlPullParser.START_DOCUMENT:
                    System.out.println("===============开始读取文档");
                    break;
                case XmlPullParser.START_TAG:
                    //读取到开始标签,把标签名进行读取<person>
                    tagname=parser.getName();
                    System.out.println(tagname+"++++++++++++++++标签名");
                    if(tagname.equals("person")){
                        be = new bean();
                        String id=parser.getAttributeValue(0).trim();
                        be.setId(Integer.parseInt(id));
                    }
                    break;
                case XmlPullParser.TEXT:
                    if(tagname.equals("name")){
                        be.setName(parser.getText());
                    }else if(tagname.equals("sex")){
                        String tsex=parser.getText().trim();
                        be.setSex(tsex);
                    }else if(tagname.equals("age")){
                        String tage=parser.getText().trim();
                        be.setAge(Integer.parseInt(tage));
                    }
                    break;
                case XmlPullParser.END_TAG:
                    //结束时,对标签名赋值
                    tagname=parser.getName();
                    //如果结束标签为</person>
                    if(tagname.equals("person")){
                        list.add(be);
                    }
                    tagname="";
                    break;

                default:
                    break;
                }
                type=parser.next();
            }
            System.out.println("===============文档读取完毕"+list);
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

sax解析

//bean里封装id,name,age属性

List<bean> list=new ArrayList<bean>();
    private ContentHandler handler=new DefaultHandler(){

        private String targetName;
        private bean be;

        @Override
        public void startDocument() throws SAXException {
            System.out.println("开始读文档---------");
            super.startDocument();
        }

        @Override
        public void endDocument() throws SAXException {
            // TODO Auto-generated method stub
            System.out.println("结束读文档-----------");
            super.endDocument();
        }

        @Override
        public void startElement(String uri, String localName, String qName,
                Attributes attributes) throws SAXException {
            System.out.println("开始-----------"+localName);
            targetName = localName;
            if(targetName.equals("person")){
                //get bean's id
                String id=attributes.getValue("id");
                be.setId(Integer.parseInt(id));
            }
            super.startElement(uri, localName, qName, attributes);
        }

        @Override
        public void endElement(String uri, String localName, String qName)
                throws SAXException {
            // TODO Auto-generated method stub
            System.out.println("结束-----------"+localName);
            if(localName.equals("person")){
                list.add(be);
                System.out.println("++++++++++"+list.size());
                be=null;
            }
            targetName=null;
            super.endElement(uri, localName, qName);
        }

        @Override
        public void characters(char[] ch, int start, int length)
                throws SAXException {
            String content=new String(ch, start, length);
            System.out.println("读取的内容-----------"+content);

            if("name".equals(targetName)){
                be.setName(content);
            }else if("age".equals(targetName)){
                be.setAge(content);
            }
            super.characters(ch, start, length);
        }
    };
    private ListView lv;
    private ArrayAdapter<bean> ad;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lv=(ListView)findViewById(R.id.lv);
        sax();
        ArrayAdapter<bean> ad=new ArrayAdapter<bean>(MainActivity.this, android.R.layout.simple_list_item_1, list);
        lv.setAdapter(ad);
    }
    public void sax(){
        // 1  get sax_spf
        SAXParserFactory spf=SAXParserFactory.newInstance();
        try {
            // 2
            SAXParser parser=spf.newSAXParser();
            // 3  xmlreader and set listener
            XMLReader reader=parser.getXMLReader();
            reader.setContentHandler(handler);
            reader.parse(new InputSource(getAssets().open("data1.xml")));

        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值