好久没有解析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文件相关推荐

  1. Android -- 创建XML文件对象及其序列化, pull解析XML文件

    1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /*** 短信的业务bean* @author Administrator ...

  2. 在Android应用中使用Pull解析XML文件(传智播客视频笔记)

    Service.java源码: package com.sinaapp.ssun.service; import java.io.InputStream; import java.io.OutputS ...

  3. 使用pull解析XML文件

    try {InputStream is = this.getAssets().open("stu.xml");//初始化一个xml解析器XmlPullParser parser = ...

  4. 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 ...

  5. Android之Pull解析XML

    一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...

  6. Android向本地写入一个XML文件和解析XML文件

    在网络存储过程中有很多时候会遇到XML文件解析和使用XML保存一些信息,解析XML文件用的比较多的方法是pull解析和SAX解析,但是我一般只用pull解析,下面就向cd卡写入一个XML文件,然后再使 ...

  7. 生成XML文件的步骤 解析XML文件

    ##生成XML文件的步骤 1.初始化一个xml的序列化器 XmlSerializer serializer = Xml.newSerializer(); 2.设置序列化器的参数 serializer. ...

  8. Android 之解析XML文件

    1.布局页面 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <Linear ...

  9. Android中使用SAX方式解析XML文件

    转载http://blog.csdn.net/cjjky/article/details/6666834 在Android中解析XML文主要有三种方式,分别为Simple API for XML(SA ...

最新文章

  1. 实现Date函数属性中的format方法
  2. 基础知识:语言、编程、计算机组成、cpu、存储器
  3. [Pyhon疫情大数据分析] 三.新闻信息抓取及词云可视化、文本聚类和LDA主题模型文本挖掘
  4. dotnet core调试docker下生成的dump文件
  5. .net控件FreeTextBox使用方法
  6. 插入公式_word2016编写文档 插入公式选项为暗,不能操作
  7. MySQl Window Function Concepts
  8. 海狮号水下机器人_美军派出动物特种兵搜寻失踪水下机器人
  9. STM32打印log--使用J-Link RTT Viewer
  10. 梯度下降-单变量线性回归-理论+代码+解释
  11. 飞机大战小游戏3.0
  12. [java实战篇]--java的GUI(1)
  13. 自动驾驶 10-4: 为什么是传感器融合 Why Sensor Fusion
  14. STM32——新建 Keil MDK 5 工程(寄存器版本)
  15. win7如何添加终端服务器,Win7怎么添加windows超级终端?
  16. 震惊!!【微信拼图红包】继微信语音红包后又一新技能
  17. 计算两个日期之间,相差多少天C语言详解
  18. 大师云集!CCAI 2017 中国人工智能大会 8 折强势优惠中
  19. Java并没有失去它的魔力
  20. Python编程:节省内存的办法(持续更新ing...)

热门文章

  1. jquery zTree异步搜索的例子--搜全部节点
  2. Yii DataProvider
  3. wifi万能钥匙自媒体平台开放注册(付注册流程)
  4. CentOS 安装 rz sz
  5. 【BZOJ-4524】伪光滑数 堆 + 贪心 (暴力) [可持久化可并堆 + DP]
  6. mysql 存储过程
  7. Seq2Seq中的Attention
  8. 使用rsync完成内网数据备份
  9. mongodb系列~mongodb的副本集搭建和原理
  10. bootstrap下的双选时间插件使用方法