解析XML数据

来源:互联网 发布:成都网络营销优化 编辑:程序博客网 时间:2024/05/17 22:59

解析XML数据

其实就是已有的工具使用方法,特别白痴的做法,记住就好了。贵在实际项目中融会贯通

Pull解析方式

    private void parseXmlWithPull(String xmlData) {        try {            //创建实例            XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();            //得到对象            XmlPullParser xmlPullParser = xmlPullParserFactory.newPullParser();            //设置xml数据            xmlPullParser.setInput(new StringReader(xmlData));            String id = "";            String name = "";            String verson = "";            //得到当前的解析事件,若不等于1:说明解析工作还没有完成,调用next获取下一个解析事件            int eventType = xmlPullParser.getEventType();            while (eventType != XmlPullParser.END_DOCUMENT) {                //拿到当前节点名                String nodeName = xmlPullParser.getName();                switch (eventType) {                    //开始解析2                    case XmlPullParser.START_TAG:                        if ("id".equals(nodeName)) {                            //获取节点内容                            id = xmlPullParser.nextText();                        } else if ("name".equals(nodeName)) {                            name = xmlPullParser.nextText();                        }else if("verson".equals(nodeName)){                            verson=xmlPullParser.nextText();                        }                        break;                        //解析完成3                    case XmlPullParser.END_TAG:                        if("app".equals(nodeName)){                            Log.i(TAG, "parseXmlWithPull: "+"id is"+id);                        }                        break;                    default:                        break;                }                eventType=xmlPullParser.next();            }        } catch (IOException e) {            e.printStackTrace();        } catch (XmlPullParserException e) {            e.printStackTrace();        }    }

SAX解析方式

  • 先建一个Handler继承DefaultHandler
/** * git_workspace * * @author liyuanli * @data 2017/10/31 */public class ContentHandler extends DefaultHandler {    private String nodeName;    private StringBuilder id;    private StringBuilder name;    private StringBuilder verson;    private String TAG="ContentHandler";    /**     * 开始解析xml时调用     * 这里初始化StringBuilder对象     * @throws SAXException     */    @Override    public void startDocument() throws SAXException {        super.startDocument();        id=new StringBuilder();        name=new StringBuilder();        verson=new StringBuilder();    }    /**     * 完成整个xml解析时调用     * @throws SAXException     */    @Override    public void endDocument() throws SAXException {        super.endDocument();    }    /**     * 开始解析某个节点是调用     * @param uri     * @param localName     * @param qName     * @param attributes     * @throws SAXException     */    @Override    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {        super.startElement(uri, localName, qName, attributes);        //记录当前节点名        nodeName=localName;    }    /**     * 完成解析某个节点时调用     * @param uri     * @param localName     * @param qName     * @throws SAXException     */    @Override    public void endElement(String uri, String localName, String qName) throws SAXException {        super.endElement(uri, localName, qName);        if("app".equals(localName)){            Log.i(TAG, "endElement: "+"id is "+id.toString().trim());            //最后要将StirngBuilder清空掉            id.setLength(0);        }    }    /**     * 读取节点内容时调用     * @param ch     * @param start     * @param length     * @throws SAXException     */    @Override    public void characters(char[] ch, int start, int length) throws SAXException {        super.characters(ch, start, length);        //根据当前节点名判断将内容添加到那个StirngBuilder对象中        if ("id".equals(nodeName)){            id.append(ch,start,length);        }else if ("name".equals(nodeName)){            name.append(ch,start,length);        }else if ("verson".equals(nodeName)){            verson.append(ch,start,length);        }    }}
  • 调用Handler解析
    private void parseXMLWithSAX(String xmlData){        try {            SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();            XMLReader xmlReader=saxParserFactory.newSAXParser().getXMLReader();            ContentHandler contentHandler=new ContentHandler();            //将ContentHandler的实例设置到XMLReader中            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();        }    }
原创粉丝点击