Xml解析之Pull、SAX(非泛型方式)

Pull方式解析Xml例子:

String mData = "<apps>\n" +
            "<app>\n" +
            "<id>1</id>\n" +
            "<name>Google Maps</name>\n" +
            "<version>1</version>\n" +
            "<apps>\n" +
            "<name>Google 1</name>\n" +
            "<age>24</age>\n" +
            "</apps>\n" +
            "</app>\n" +
            "<app>\n" +
            "<id>2</id>\n" +
            "<name>Chrome</name>\n" +
            "<version>2.1</version>\n" +
            "<apps>\n" +
            "<name>Google 2</name>\n" +
            "<age>34</age>\n" +
            "</apps>\n" +
            "</app>\n" +
            "<app>\n" +
            "<id>3</id>\n" +
            "<name>Google Play</name>\n" +
            "<version>3.1</version>\n" +
            "<apps>\n" +
            "<name>Google 3</name>\n" +
            "<age>44</age>\n" +
            "</apps>\n" +
            "</app>\n" +
            "</apps>";
    private void pullParseXml(String data) {
        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = factory.newPullParser();
            parser.setInput(new StringReader(data));
            int type = parser.getEventType();
            String nodeName;
            while (type != XmlPullParser.END_DOCUMENT) {
                nodeName = parser.getName();
                switch (type) {
                    case XmlPullParser.START_TAG:
                        if("id".equals(nodeName)) {
                            log("id:" + parser.nextText());
                        } else if("name".equals(nodeName)) {
                            log("name:"+parser.nextText());
                        } else if("version".equals(nodeName)) {
                            log("version:"+parser.nextText());
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        break;
                        default:
                            break;
                }
                type = parser.next();
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

SAX方式解析Xml例子:
先写一个SAX的Handler用来解析Xml数据

    class SaxHandler extends DefaultHandler {
        String nodeName;
        @Override
        public void startDocument() throws SAXException {
            super.startDocument();
        }

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            super.startElement(uri, localName, qName, attributes);
            nodeName = localName;
            log("local name:"+localName);
            log("q name:" +qName);
        }

        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            super.characters(ch, start, length);
            log(new String(ch, start, length));
        }

        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            super.endElement(uri, localName, qName);
        }

        @Override
        public void endDocument() throws SAXException {
            super.endDocument();
        }
    }
    private void saxParseXml(String data) {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        try {
            XMLReader reader = factory.newSAXParser().getXMLReader();
            reader.setContentHandler(new SaxHandler());
            reader.parse(new InputSource(new StringReader(data)));
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值