第一行代码总结:10网络:10.3解析XML格式数据:
来源:互联网 发布:张伯伦场均数据 编辑:程序博客网 时间:2024/05/22 09:43
在网络上传输的数据是格式化后的数据,这种数据会有一定的结构规格和语义,当另一方收到数据消息之后就可以按照相同的结构规格进行解析,从而取出他想要的那部分内容。
最常用的格式有两种: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();//获取下一个解析事件
}
- 第一行代码总结:10网络:10.3解析XML格式数据:
- 第一行代码总结:10网络:10.4解析JSON格式数据10.4.1使用JSONObject
- 第一行代码总结:10网络:10.4解析JSON格式数据10.4.2使用GSON
- 第一行代码-10.3 解析XML数据格式
- 第一行代码总结:10网络:10.3.2 SAX解析方式
- 第一行代码-10.4 解析JSON格式数据
- 第一行代码总结:10网络:10.1WebView的用法
- 第一行代码总结:10网络:10.2.2使用HttpClient
- 网络第03天:XML数据解析
- 第一行代码网络判断
- 《第一行代码》读完总结
- 《第一行代码》扩展总结
- 《第一行代码》基础总结
- 解析XML格式数据
- 解析XML格式数据
- 解析XML格式数据
- 解析XML格式数据
- 解析XML格式数据
- 关于ServerSocketChannel支持的最大连接数测试与分析
- 第一行代码总结:10网络:10.2.2使用HttpClient
- Android ShareSdk 微信分享的步骤
- 纯代码实现布局的UIViewController跳转到带storyboard布局的UIViewController
- Java大数处理
- 第一行代码总结:10网络:10.3解析XML格式数据:
- iOS开发 音频播放、录音、视频播放、拍照、视频录制
- iOS入门之page平铺导航,scrollerview滚动计算和pager的切换
- 如何控制打印Logcat打印信息?封装Logcat的简单工具类就可以了
- mysql分页丢数据的分析
- Linux 时钟和ntp服务
- 第一行代码总结:10网络:10.3.2 SAX解析方式
- 为什么接口中变量要用final修饰
- RPG Maker MV之如何创建NPC