解析XML数据格式
1.Pull解析方式
.获取XmlPullParserFactory的实例
.借助以上实例获得XmlPullparser的对象
.调用XmlPullParser对象的setInput()方法设置好解析的内容
.通过XmlPullParser对象的getEventType()方法获取当前解析事件
.开始解析,
调用XmlPullParser对象的next()方法获取下一个解析事件
事件的常用常量有:XmlPullParser.START_TAG//开始解析某个节点,XmlPullParser.END_TAG//完成解析某个节点
调用XmlPullParser对象的getName()方法获取当前节点的名字
解析完成,getEventType()返回XmlPullParser.END_DOCUMENT常量
private void parseXML(String xml_str){
try {
//获取XmlPullparserFactory对象
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
//获得XmlPullParser对象
XmlPullParser parser = factory.newPullParser();
//设置解析内容
parser.setInput(new StringReader(xml_str));
//获取当前的事件
int eventType = parser.getEventType();
//开始解析
while(eventType != XmlPullParser.END_DOCUMENT){
String name = parser.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
//根据节点的名称进行操作
break;
case XmlPullParser.END_TAG:
//完成解析某个节点后的操作
break;
default:
break;
}
eventType = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
2.SAX解析方式
.新建一个类继承自DefaultHandler并重写父类的五个方法,基本原理与Pull解析相同
public class MyHandler extends DefaultHandler {
//开始解析Xml时调用
@Override
public void startDocument() throws SAXException {
super.startDocument();
}
//完成解析时调用
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
//解析某个节点时调用
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
}
//完成解析某个节点时调用
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
}
//获取节点内容时调用
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
}
}
private void parseXMLWithSAX(String xml_str){
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
XMLReader reader = factory.newSAXParser().getXMLReader();
MyHandler handler = new MyHandler();
reader.setContentHandler(handler);
//开始解析
reader.parse(new InputSource(new StringReader(xml_str)));
} catch (Exception e) {
e.printStackTrace();
}
}
解析JSON数据格式
1.JSONObject解析
.通过返回的字符串数据构造一个JSONObject对象
.通过JSONObject对象的一系列get方法获取指定名称的数据
json_ob.getJSONObject(String name);
json_ob.getString(String name);
json_ob.getInt(String name);
json_ob.getDouble(String name);
json_ob.getBoolean(String name);
json_ob.getJSONArray(String name);
.通过JSONArray对象的getJSONObject(int index)方法获取指定索引的JSON对象
2.GSON解析
根据JSON数据里的具体内容定义一个类,通过GSON的fromJson(String data,Class<?>)方法可以将这段数据解析为这个类的对象
根据JSON数据里的具体内容定义一个类,通过GSON的fromJson(String data,new TypeToken<List<Class<>?>>(){}.getType())方法可以将这段数据解析为这个类的集合
使用GSON需要添加依赖库
compile 'com.google.code.gson:gson:2.7'