常见的数据格式有JSON和XML两种,XML的解析常见的方法也有两种
一、Pull解析
直接上代码吧:
public void parseXMLWithPull(String xmldata){
try {
XmlPullParserFactory factory =XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser=factory.newPullParser();
xmlPullParser.setInput(new StringReader(xmldata));
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)){
//打印
}
break;
default:
break;
}
eventType=xmlPullParser.next();
}
}catch (Exception e){
e.printStackTrace();
}
}
二、SAX解析
新建一个类继承自DefaultHandler
private void parseXMLWithSAX(String xmlData) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
XMLReader xmlReader = factory.newSAXParser().getXMLReader();
ContentHandler handler = new ContentHandler();
xmlReader.setContentHandler(handler);
xmlReader.parse(new InputSource(new StringReader(xmlData)));
}catch (Exception e){
e.printStackTrace();
}
ContentHandler 类
package com.example.administrator.mycontext;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ContentHandler 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 {
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)){
//打印
id.setLength(0);
name.setLength(0);
version.setLength(0);
}
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
}