Xml解析之PULL解析 例1
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="1">
<name>zhangsan</name>
<age>22</age>
<sex>boy</sex>
</person>
<person id="2">
<name>李四</name>
<age>20</age>
<sex>女</sex>
</person>
</persons> 解析以上person.xml PULL解析:基于事件拉取
5个属性:每一个事件对应一个常量
START_DOCUMENT:开始文档 常量值 0
START_TAG:开始标签 2
TEXT: 文本 常量值 4
END_TAG: 结束标签 3
END_DOCUMENT: 结束文档 1
非常重要的方法:
next():检索下一个事件
例1. 创建了Person类。
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory; public class Demo3 { public static void main(String[] args) throws XmlPullParserException,
IOException {
// 1、获取pull解析器的对象工厂
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// 2、从工厂对象中获取解析器
XmlPullParser parser = factory.newPullParser();
// 3、设置解析文档
parser.setInput(new FileInputStream("src/person.xml"), "utf-8");
// 4、开始解析
List<Person> list = null;
Person p = null;
// 获取事件类型
int type = parser.getEventType();
while (type != XmlPullParser.END_DOCUMENT) {
String tagName = parser.getName();
switch (type) {
case XmlPullParser.START_TAG:
if ("persons".equals(tagName)) {
// 如果开始标记是persons,应该创建集合
list = new ArrayList<Person>();
} else if ("person".equals(tagName)) {
// 如果开始标记是person,应该创建person对象
p = new Person();
if (parser.getAttributeCount() > 0) {
// 获取属性id的值,赋值给person对象的id属性
p.setId(parser.getAttributeValue(0));// 第一个属性
}
} else if ("name".equals(tagName)) {
p.setName(parser.nextText());
} else if ("age".equals(tagName)) {
p.setAge(Integer.parseInt(parser.nextText()));
} else if ("sex".equals(tagName)) {
p.setSex(parser.nextText());
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(tagName)) {
// </person> 将Person放入list集合
list.add(p);
}
break;
}
// 很重要的步骤:获取下次事件类型
type = parser.next();
}
// 打印list
for (Person per : list) {
System.out.println(per);
}
} static class Person {
private String id;
private String name;
private int age;
private String sex; public Person() {
super();
} public Person(String id, String name, int age, String sex) {
super();
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
} public String getId() {
return id;
} public void setId(String str) {
this.id = str;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} @Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age
+ ", sex=" + sex + "]";
} }
}
Xml解析之PULL解析 例1的更多相关文章
- 非常简单的XML解析(SAX解析、pull解析)
这里只是把解析的数据当日志打出来了 非常简单的xml解析方式 package com.example.demo.service; import java.io.IOException; import ...
- XMl解析之Pull解析
HttpUtils: package cn.qf.parser; import java.io.BufferedOutputStream; import java.io.FileOutputStrea ...
- XML 序列化与PULL解析
简介 Pull解析XML XmlPullParser解析器的运行方式与SAX解析器相似.它提供了类似的事件(开始元素和结束元素),但需要使用parser.next()方法来提取它们.事件将作为数值代码 ...
- Xml解析之PULL解析 例2
<?xml version="1.0" encoding="UTF-8"?> <books> <book id="100 ...
- Android之Pull解析XML
一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...
- Android pull解析xml文件
本文介绍android中使用pull来解析xml文件 先自己写一个xml文件,存一些天气信息 <?xml version="1.0" encoding="UTF-8 ...
- 安卓使用pull解析器解析XML文件
学习一下: public class MainActivity extends Activity { List<City> cityList; @Override protected vo ...
- XML解析之PULL
在Android中极力推荐的xmlpull方式解析xml. 为什么 STAX 解析方式 效率 好于 SAX ? 1.SAX 无选择性的,所有事件都会处理 解析方式,Stax 由用户控制需要处理事件类型 ...
- pull解析xml文件
pull解析xml文件 先自己写一个xml文件,存一些天气信息 拿到xml文件 InputStream is = getClassLoader().getResourceAsStream(" ...
随机推荐
- swfupload js中 file 对象的属性
name=3cc68cfc60b87e6dd6887d8a.jpg modificationdate=Wed Apr 21 15:48:30 UTC+0800 2010 filestatus=-1 ...
- Python socket – network programming tutorial
原文:https://www.binarytides.com/python-socket-programming-tutorial/ --------------------------------- ...
- 学生表 课程表 成绩表 教师表 50个常用sql语句
原文:http://www.cnblogs.com/zengxiangzhan/archive/2009/09/23/1572276.html Student(S#,Sname,Sage,Ssex) ...
- matlab中的size(),length(),ndims()函数的使用方法
1.size()使用方法: size(a)表示矩阵每一个维度的长度 比方size([1 2 3;4 5 6]) 等于[2 3]: 表示他有2行3列. size([1 2 3]) 等于[1 3]: 表示 ...
- Apache多站点配置教程
看见这个版关于网络程序方面的文章还比较少,下面来一发~实践证明,本教程适用于Apache 2.2.22,其他版本相差应该不大 我的博客:http://wislab.net/,希望跟大家多多交流噢 Ap ...
- 微信小程序 - 为何setData到页面上有的加分号
Page({ /** * 页面的初始数据 */ data: { }, /** * 生命周期函数--监听页面加载 */ onLoad: function(options) { let _page = t ...
- 算法笔记_033:十六进制转八进制(Java)
目录 1 问题描述 2 解决方案 2.1 注意问题 2.2 具体实现代码 1 问题描述 具体问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1& ...
- Install fail! Error: [@@babel/runtime/core-js/object/keys]
1.Install fail! Error: [@@babel/runtime/core-js/object/keys] "@babel/runtime": "7.0.0 ...
- excel 如何为列添加指定内容(字符串)
excel 如何为列添加指定内容(字符串) CreateTime--2018年5月26日17:52:32 Author:Marydon 1.情景展示 D列的值需要获取B列的值并且在后面统一加上12 ...
- ibatis 批量插入
ibatis 批量插入 CreationTime--2018年7月2日10点21分 Author:Marydon 1.说明 基于oracle的sql语句 2.主键id有默认值,比如:sys_gui ...