Pull解析Xml文件
好久没有解析xml文件了,居然都快忘了,这两天后台居然返回的xml格式的数据,尼玛,好吧,随意在整理整理
一、什么是xml
eXtensiable Markup Language 可扩展标记语言
标记语言:由标签(标记)构成的语言。标记语言不是编程语言
可扩展:所有的标签都是自定义的。没有预定义的
二、xml的作用
做数据存储
作为配置文件
作为数据载体,在网络中传输
解析思想:
DOM:文档对象模型。一次性将xml文档全部加载进内存,在内存中形成一颗dom树型结构。操作dom树形结构,对文档进行增删改查的操作。
优点:可以对文档进行增删改查的所有操作
缺点:耗内存,速度慢。
SAX:基于事件驱动,逐行读取
监听机制:
事件:一件事件
事件源:事件发生的组件
监听器:一个对象,事件发生后会执行该对象的方法
注册监听:给事件源上绑定一个监听器,监听某一个事件的发生。
优点:不占内存,速度快
缺点:只能查询,不能增删改
大概回顾一下直接上代码,毕竟pull解析还是比较简单的
工程目录:
Student类
public class Student {private String id;private String name;private String age;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}@Override public String toString() {return "Student{" +"id='" + id + '\'' +", name='" + name + '\'' +", age='" + age + '\'' +'}';} }
public class MainActivity extends AppCompatActivity {private InputStream is;private TextView tvContent;List<Student> list = null;Student student = null;@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tvContent = (TextView) findViewById(R.id.tv_content);try {//获取资产目录下的xml文件 is = this.getAssets().open("students.xml");} catch (IOException e) {e.printStackTrace();}}public void parse(View view) {//解析xml parseXml();//将集合展示在TextView上 tvContent.setText(list.toString());}private void parseXml() {//1.创建解析器工厂 XmlPullParserFactory factory = null;try {factory = XmlPullParserFactory.newInstance();//2.获取解析器 XmlPullParser parser = factory.newPullParser();//3.设置输入流 parser.setInput(new InputStreamReader(is));//4.获取事件类型 int type = parser.getEventType();//5.循环判断是否是文档的结束 while (type != XmlPullParser.END_DOCUMENT) {/** * 需求:将xml文档中存储的数据封装为Student对象。将对象添加到集合中 * * 分析: * 开始标签: * * students:创建集合 * * student:创建Student对象,并且获取属性值,给对象的id属性赋值 * * name:获取其下一个文本,给对象的name属性赋值 * * age:获取其下一个文本,给对象的age属性赋值 * * 结束标签: * * student:将对象添加到集合中 * */ //判断事件类型,做出不同的操作 //获取标签名称 String tagName = parser.getName();switch (type) {case XmlPullParser.START_TAG://判断标签名称是什么?做出不同的操作 if ("students".equals(tagName)) {//创建集合 list = new ArrayList<>();} else if ("student".equals(tagName)) {//创建对象,获取id属性值 student = new Student();//获取属性值 String id = parser.getAttributeValue(0);student.setId(id);} else if ("name".equals(tagName)) {//获取下一个文本,赋值 String name = null;try {name = parser.nextText();} catch (IOException e) {e.printStackTrace();}student.setName(name);} else if ("age".equals(tagName)) {//获取下一个文本,赋值 String age = null;try {age = parser.nextText();} catch (IOException e) {e.printStackTrace();}student.setAge(age);}break;case XmlPullParser.END_TAG:if ("student".equals(tagName)) {//装载集合 list.add(student);}break;default:break;}//6.向下走一行,并且重新获取事件类型 try {type = parser.next();} catch (IOException e) {e.printStackTrace();}}} catch (XmlPullParserException e) {e.printStackTrace();}} }
sdutents.xml
<?xml version="1.0" encoding='utf-8'?> <students> <student id="s001"> <name>zz</name> <age>23</age> </student> <student id="s002"> <name>ls</name> <age>24</age> </student> <student id="s003"> <name>ww</name> <age>25</age> </student> </students>
最终解析的数据:
[Student{id='s001', name='zz', age='23'}, Student{id='s002', name='ls', age='24'}, Student{id='s003', name='ww', age='25'}]
Pull解析Xml文件相关推荐
- Android -- 创建XML文件对象及其序列化, pull解析XML文件
1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /*** 短信的业务bean* @author Administrator ...
- 在Android应用中使用Pull解析XML文件(传智播客视频笔记)
Service.java源码: package com.sinaapp.ssun.service; import java.io.InputStream; import java.io.OutputS ...
- 使用pull解析XML文件
try {InputStream is = this.getAssets().open("stu.xml");//初始化一个xml解析器XmlPullParser parser = ...
- convert android layout xml,详解Android之解析XML文件三种方式(DOM,PULL,SAX)
1.xml文件代码 ${fq.content} ${fq.time} 2.XML网页效果图 3.Android代码 1.布局文件 xmlns:tools="http://schemas.an ...
- Android之Pull解析XML
一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...
- Android向本地写入一个XML文件和解析XML文件
在网络存储过程中有很多时候会遇到XML文件解析和使用XML保存一些信息,解析XML文件用的比较多的方法是pull解析和SAX解析,但是我一般只用pull解析,下面就向cd卡写入一个XML文件,然后再使 ...
- 生成XML文件的步骤 解析XML文件
##生成XML文件的步骤 1.初始化一个xml的序列化器 XmlSerializer serializer = Xml.newSerializer(); 2.设置序列化器的参数 serializer. ...
- Android 之解析XML文件
1.布局页面 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <Linear ...
- Android中使用SAX方式解析XML文件
转载http://blog.csdn.net/cjjky/article/details/6666834 在Android中解析XML文主要有三种方式,分别为Simple API for XML(SA ...
最新文章
- 实现Date函数属性中的format方法
- 基础知识:语言、编程、计算机组成、cpu、存储器
- [Pyhon疫情大数据分析] 三.新闻信息抓取及词云可视化、文本聚类和LDA主题模型文本挖掘
- dotnet core调试docker下生成的dump文件
- .net控件FreeTextBox使用方法
- 插入公式_word2016编写文档 插入公式选项为暗,不能操作
- MySQl Window Function Concepts
- 海狮号水下机器人_美军派出动物特种兵搜寻失踪水下机器人
- STM32打印log--使用J-Link RTT Viewer
- 梯度下降-单变量线性回归-理论+代码+解释
- 飞机大战小游戏3.0
- [java实战篇]--java的GUI(1)
- 自动驾驶 10-4: 为什么是传感器融合 Why Sensor Fusion
- STM32——新建 Keil MDK 5 工程(寄存器版本)
- win7如何添加终端服务器,Win7怎么添加windows超级终端?
- 震惊!!【微信拼图红包】继微信语音红包后又一新技能
- 计算两个日期之间,相差多少天C语言详解
- 大师云集!CCAI 2017 中国人工智能大会 8 折强势优惠中
- Java并没有失去它的魔力
- Python编程:节省内存的办法(持续更新ing...)