Pull解析Xml文件
来源:互联网 发布:网络蜘蛛磁力链 编辑:程序博客网 时间:2024/06/03 23:47
好久没有解析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'}]
阅读全文
1 0
- Pull解析XML文件
- Pull解析xml文件
- pull解析xml文件
- Pull解析xml文件
- pull解析xml文件
- pull解析xml文件
- pull解析xml文件
- Pull解析xml文件
- Pull解析XML文件
- pull解析xml文件
- pull解析xml文件
- Pull解析Xml文件
- Pull解析XML文件
- pull解析XML文件
- PULL解析XML文件
- pull解析XML文件
- pull解析XML文件
- pull解析XML文件
- python写算法题:leetcode: 35. Search Insert Position
- JQuery对象和DOM对象的区别
- 如何判断链表是否有环
- 指针
- A
- Pull解析Xml文件
- 卡特兰数 hdu 5673
- unsigned省略关键字
- java线程池用法
- studio可以调试但打包报错-out of memory
- Velocity判断null和空
- constexpr的使用
- 整型的范围大小
- 实验吧NSCTF crypto200: