在网络上传输的数据是格式化后的数据,这种数据会有一定的结构规格和语义,当另一方收到数据消息之后就可以按照相同的结构规格进行解析,从而取出他想要的那部分内容。
最常用的格式有两种:XML和JSON.
· 解析XML格式的数据有多种方式,这里介绍两种:Pull解析和SAX解析。
比起XML,JSON的主要优势在于它的体积更小,在网络上传输的时候更省流量。缺点在于,它的语义较差,看起来不如XML直观。(代码量更少)
· 解析JSON数据的方法有多种方法,可以使用官方提供的JSONObject,也可以使用谷歌的开源库GSON,另外,第三方开源库如Jackson,FastJson等也非常不错。
搭建一个最简单的Web服务器:
在这个服务器上提供一段XML文本,然后我们在程序里去访问这个服务器,再对得到的XML文本进行解析。
有很多服务器类型可供选择,这里使用Apache服务器。
1、可执行文件安装??????????????????
2、配置安装
10.3.1 Pull解析方式
步骤:
1、首先获取一个XmlPullParserFactory的实例,主要调用其静态方法newInstance()得到。
XmlPullParserFactory factory =XmlPullParserFactory.newInstance();
2、然后利用XmlPullParserFactory的实例,调用newPullParser()方法,得到XmlPullParser对象。
XmlPullParser xmlPullParser =factory.newPullParser();
3、然后调用XmlPullParser的setInput()方法将服务器返回的XML数据设置进去就可以开始解析了。
xmlPullParser.setInput(new StringReader(xmlData));
注意:这里的StringReader类是Reader类的子类。public class StringReaderextends ReaderAspecialized Reader that reads characters from a String in a sequential manner.
4、具体解析的时候,首先通过XmlPullParser类的getEventType()方法得到当前的解析事件。Returns the type of the current event(START_TAG, END_TAG, TEXT, etc.)
int eventType = xmlPullParser.getEventType();//得到当前解析事件
5、然后在一个while循环中不断地进行解析,如果当前的解析事件不等于XmlPullParser.END_DOCUMENT,说明解析工作还没完成,调用XmlPullParser的next()方法可以获取下一个解析事件。
String id = “”;
String name = “”;
String version = “”;
while(eventType !=XmlPullParser.END_DOCUMENT){
……
eventType = xmlPullParser.next();
}
6、在while循环中,通过XmlPullParser类的getName()方法得到当前结点的名字,如果发现结点名等于id,name,或version,就调用nextText()方法来获取结点内具体的内容,每当解析完一个app结点后就将获取到的内容打印出来。
Stringid = “”;
String name = “”;
String version = “”;
while(eventType !=XmlPullParser.END_DOCUMENT){
String nodeName =xmlPullParsr.getName();//得到当前结点的名字
//开始解析某个结点
switch(enventType){
case XmlPullParser.START_TAG:{
if(“id”.equals(nodeName)){
id = xmlPullParser.nextText();
} else if (“name”.equals(nodeName)){
name =xmlPullParser.nextText();
} elseif(“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();//获取下一个解析事件
}