Android数据解析之XML篇

来源:互联网 发布:js 打开ie浏览器 编辑:程序博客网 时间:2024/09/21 06:35

假设在网络上有这么一段数据XML数据

<apps><app><id>1</id><name>Google Maps</name><version>1.0</version></app><app><id>2</id><name>Chrome</name><version>2.1</version></app><app><id>3</id><name>Google Play</name><version>2.3</version></app></apps>

Pull解析(这里我们将通过网络传输回的数据以String类型传入函数进行解析)

private void parseXMLWithPull(String xmlData) {    try {        //获取一个XmlPullParserFactory的实例        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();        XmlPullParser xmlPullParser = factory.newPullParser();        xmlPullParser.setInput(new StringReader(xmlData));        //getEventType用于获取当前解析事件        int eventType = xmlPullParser.getEventType();        String id = "";        String name = "";        String version = "";        //判断解析是否完成        while (eventType != XmlPullParser.END_DOCUMENT) {            String nodeName = xmlPullParser.getName();            switch (eventType) {                // 开始解析某个结点                case XmlPullParser.START_TAG: {                    if ("id".equals(nodeName)) {                        id = xmlPullParser.nextText();                    } else if ("name".equals(nodeName)) {                        name = xmlPullParser.nextText();                    } else if ("version".equals(nodeName)) {                        version = xmlPullParser.nextText();                    }                    break;                }                // 完成解析某个结点                case XmlPullParser.END_TAG: {                    if ("app".equals(nodeName)) {                        Log.d("MainActivity", "id is " + id);                        Log.d("MainActivity", "name is " + name);                        Log.d("MainActivity", "version is " + version);                    }                    break;                }                default:                    break;            }            eventType = xmlPullParser.next();        }    } catch (Exception e) {        e.printStackTrace();    }}

SAX解析

新建一个类继承自DefaultHandler,并重写父类的五个方法

public class SAXHandler extends DefaultHandler {    @Override    public void startDocument() throws SAXException {//开始解析xml    }    @Override    public void startElement(String uri, String localName, String qName,                             Attributes attributes) throws SAXException {//开始解析某个节点    }    @Override    public void characters(char[] ch, int start, int length) throws            SAXException {//获取节点内容    }    @Override    public void endElement(String uri, String localName, String qName) throws            SAXException {//结束解析    }    @Override    public void endDocument() throws SAXException {    }}

针对本文XML数据的解析

public class SAXHandler extends DefaultHandler {    private String nodeName;    private StringBuilder id;    private StringBuilder name;    private StringBuilder version;    @Override    public void startDocument() throws SAXException {        id = new StringBuilder();        name = new StringBuilder();        version = new StringBuilder();    }    @Override    public void startElement(String uri, String localName, String qName,                             Attributes attributes) throws SAXException {        // 记录当前结点名        nodeName = localName;    }    @Override    public void characters(char[] ch, int start, int length) throws            SAXException {        // 根据当前的结点名判断将内容添加到哪一个StringBuilder对象中        if ("id".equals(nodeName)) {            id.append(ch, start, length);        } else if ("name".equals(nodeName)) {            name.append(ch, start, length);        } else if ("version".equals(nodeName)) {            version.append(ch, start, length);        }    }    @Override    public void endElement(String uri, String localName, String qName) throws            SAXException {        if ("app".equals(localName)) {            Log.d("ContentHandler", "id is " + id.toString().trim());            Log.d("ContentHandler", "name is " + name.toString().trim());            Log.d("ContentHandler", "version is " + version.toString().trim());            //清空StringBuilder,上面的trim()用于去除多余的换行空格            id.setLength(0);            name.setLength(0);            version.setLength(0);        }    }    @Override    public void endDocument() throws SAXException {    }}

OK,简单的xml解析就是这些了,接下来再重点总结一下gson格式的数据解析。


0 0
原创粉丝点击