android XML data parsing

There are two main formats for downloading data on the Internet: XML and JSON, but these two data formats have their own format characters. Parsing the data is to extract the data we need from the two formats and remove the format characters. This article documents two common XML parsing methods:

JSON data parsing method: http://blog.csdn.net/q296264785/article/details/53909442

PULL analysis method of XML data analysis commonly used methods:

private void XMLWithPull(String xmlData){//XML数据解析 pull方式
        try {
            //1、获得一个XmlPullParserFactory实例
            XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();
            //2、通过XmlPullParserFactory实例得到XmlPullParser对象
            XmlPullParser xmlPullParser = xmlPullParserFactory.newPullParser();
            //3、加载需要解析的数据
            xmlPullParser.setInput(new StringReader(xmlData));r
            //得到当前解析事件
            int eventType = xmlPullParser.getEventType();
            String id = "";
            String name = "";
            String version = "";
            //如果解析事件不等于END_DOCUMENT,说明解析还没完成,需要继续解析
            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 (XmlPullParserException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }

    }

The SAX parsing method of XML data parsing common methods: The
SAX parsing method needs to implement a subclass of DefaultHandler and rewrite the related methods. The role of the method can be understood corresponding to PULL analysis.

public class ContentHandler extends DefaultHandler {
    private String nodeName;
    private StringBuilder id;
    private StringBuilder name;
    private StringBuilder version;

    @Override
    public void startDocument() throws SAXException {//开始解析XML的时候调用
        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 {//获取节点中内容的时候调用
        if("id".equals(nodeName)){
            id.append(ch, start, length);
        }else if("name".equals(nodeName)){
            name.append(ch, start, length);
        }else if("version".equals(nodeName)){
            name.append(ch, start, length);
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {//完成某个节点的时候调用
        if("app".equals(localName)){
            Log.d("MainActivity", "id is " + id.toString().trim());
            Log.d("MainActivity", "name is " + name.toString().trim());
            Log.d("MainActivity", "version is " + version.toString().trim());
            id.setLength(0);
            name.setLength(0);
            version.setLength(0);
        }
    }

    @Override
    public void endDocument() throws SAXException {//完成整个解析的时候调用
        super.endDocument();
    }
}

Instantiate the DefaultHandler subclass and parse the data through the assignment of related methods.

private void XMLWithSAX(String xmlData){
        SAXParserFactory factory = SAXParserFactory.newInstance();
        try {
            XMLReader xmlReader = factory.newSAXParser().getXMLReader();
            ContentHandler contentHandler = new ContentHandler();
            xmlReader.setContentHandler(contentHandler);
            xmlReader.parse(new InputSource(new StringReader(xmlData)));
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Parsed XML target data:

<apps>
<app>
<id>1</id>
<name>aa</name>
<version>1.0</version>
</app>
<app>
<id>2</id>
<name>Hello</name>
<version>1.2</version>
</app>
<app>
<id>3</id>
<name>bb</name>
<version>1.8</version>
</app>
</apps>
Published 34 original articles · Like 10 · Visits 30,000+

Guess you like

Origin blog.csdn.net/q296264785/article/details/53897107