文档章节

pull解析

f
 flyqilong
发布于 2016/01/04 08:32
字数 890
阅读 8
收藏 0
第一种:
import java.io.FileNotFoundException;
import java.io.FileReader;
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;
/*
 * XML中的内容
<?xml version="1.0" encoding="utf-8"?>
<Student>
   <student>
      <id>1</id>
      <name>张三</name>
      <age>22</age>
   </student>
   <student>
      <id>2</id>
      <name>李四</name>
      <age>20</age>
   </student>
</Student>
 */
public class Pull1 {
public static void main(String[] args) {
     //得到解析工厂对象
try {
XmlPullParserFactory factor=XmlPullParserFactory.newInstance();
//创建解析器
XmlPullParser parser=factor.newPullParser();
//解析器根文件关联,下面两种方法关联看自己喜欢
//parser.setInput(new FileInputStream("f:\\Student.xml"),"utf-8");
//出现这个错误:为文档编码问题PI must not start with xml (position:unknown @1 :5 in java.io.InputStreamReader@131245a)
parser.setInput(new FileReader("e:\\Student2.xml"));
//得到事件常量
int type=parser.getEventType();
String tag;//作为标记
List<Student>list=null;
Student stu=null;
while(type!=parser.END_DOCUMENT){//判断不等于结束标记值为1
//得到标记
tag=parser.getName();
//用switch语句
switch (type) {
case XmlPullParser.START_DOCUMENT://此语句只执行一次值为0
System.out.println("开始解析文件");
list=new ArrayList<Student>();
break;
case XmlPullParser.START_TAG://开始标记,也就是标记之间的内容判断值为2
if("student".equals(tag)){
stu=new Student();//一进入就开始创建对对象
}else if("id".equals(tag)){
stu.id=Integer.parseInt(parser.nextText());//获取标记之间的内容
}else if("name".equals(tag)){
stu.name=parser.nextText();
}else if("age".equals(tag)){
String str=parser.nextText();//获取标记之间的内容
stu.age=Integer.parseInt(str);
}
break;
case XmlPullParser.END_TAG://此语句只执行一次
if("student".equals(tag)){//每一次标记之间结束时将对象添加到集合中
list.add(stu);
}
break;
default:
break;
}
type=parser.next();//标记跳到下一个标记,调到下一个事件常量
}
//遍历集合打印出来
for(Student s:list){
System.out.println(s);
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
第二种:
/*
 * XML中的内容,跟第一个不一样的地方是,把id放在了<Student>标记里面
 <?xml version="1.0" encoding="utf-8" ?>
<students>
<student id="1">
<name>张三</name>
<age>20</age>
</student>
<student id="2">
<name>李四</name>
<age>22</age>
</student>
<student id="3">
<name>王五</name>
<age>22</age>
</student>
</students>
 */
import java.io.FileNotFoundException;
import java.io.FileReader;
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 Pull2 {
public static void main(String[] args) {
  //得到解析工厂对象
try {
XmlPullParserFactory factor=XmlPullParserFactory.newInstance();
//创建解析器
XmlPullParser parser=factor.newPullParser();
//解析器根文件关联,下面两种方法关联看自己喜欢
//parser.setInput(new FileInputStream("f:\\Student.xml"),"utf-8");
//出现这个错误:为文档编码问题PI must not start with xml (position:unknown @1 :5 in java.io.InputStreamReader@131245a)
parser.setInput(new FileReader("e:\\students.xml"));
//得到事件常量
int type=parser.getEventType();
String tag;//作为标记
List<Student>list=null;
Student stu=null;
while(type!=parser.END_DOCUMENT){//判断不等于结束标记值为1
//得到标记
tag=parser.getName();
//用switch语句
switch (type) {
case XmlPullParser.START_DOCUMENT://此语句只执行一次值为0
System.out.println("开始解析文件");
list=new ArrayList<Student>();
break;
case XmlPullParser.START_TAG://开始标记,也就是标记之间的内容判断值为2
if("student".equals(tag)){
stu=new Student();
//由于id在student里面所以要遍历里面的属性
for(int i=0;i<parser.getAttributeCount();i++){
String name=parser.getAttributeName(i);
String value=parser.getAttributeValue(i);
if("id".equals(name)){
stu.id=Integer.parseInt(value);
}
}
}else if("name".equals(tag)){
stu.name=parser.nextText();
}else if("age".equals(tag)){
String str=parser.nextText();//获取标记之间的内容
stu.age=Integer.parseInt(str);
}
break;
case XmlPullParser.END_TAG://此语句只执行一次
if("student".equals(tag)){//每一次标记之间结束时将对象添加到集合中
list.add(stu);
}
break;
default:
break;
}
type=parser.next();//标记跳到下一个标记,调到下一个事件常量
}
//遍历集合打印出来
for(Student s:list){
System.out.println(s);
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
实体类:
public class Student {
public int id;
public String name;
public int age;
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}

© 著作权归作者所有

f
粉丝 3
博文 93
码字总数 53900
作品 0
Android工程师
私信 提问
[Android] android平台下sax,dom,pull解析方式性能比较

1.Android中三种XML的解析方式,分别为Dom,Sax,Pull,其中Pull的解析方式最优 2.Dom,Sax,Pull解析方式的区别 (1).Dom解析方式: 首先一下子加载整个文档然后再挨个节点解析,费流量 优点:对于处理...

枫兮兮
2014/02/27
96
0
XML解析之——Pull解析和Xml转Json

Xml的使用在Android开发中也时不时地遇到,通常xml用来写配置文件。Xml解析也是Android开发人员必备的一项技术点。常见的XML解析为DOM解析,SAX解析和PULL解析。 DOM解析: 一次性将全部内容...

翻滚吧李博
2017/12/28
0
0
android数据存储与访问之使用pull解析器

Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE。如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件。andro...

长平狐
2012/09/03
96
0
PULL解析XML和SAX解析的区别

如果在一个XML文档中我们只需要前面一部分数据,但是使用SAX方式或DOM方式会对整个文档进行解析,尽管XML文档中后面的大部分数据我们其实都不需要解析,因此这样实际上就浪费了处理资源。使用...

TedYin
2013/11/12
241
0
Android 创建与解析XML(四)—— Pull方式

1、Pull概述 Android系统中和创建XML相关的包为org.xmlpull.v1,在这个包中不仅提供了用于创建XML的 XmlSerializer,还提供了用来解析XML的Pull方式解析器 XmlPullParser XmlSerializer没有像...

长平狐
2013/01/06
599
0

没有更多内容

加载失败,请刷新页面

加载更多

PhotoShop 色调:理解直方图/RGB通道信息

一、直方图:图表的形式,展示图像像素分布的情况 1.平均值:表示平均亮度 2.标准偏差值:表示亮度值范围内的中间值 3.像素: 表示用于计算直方图的像素总数 4.色阶:显示指针下面的区域亮度...

东方墨天
12分钟前
4
0
wildfly(JBoss AS)应用服务器快速入门

什么是wildfly JBoss AS 从8版本起名为wildfly。Wildfly是一个开源的基于JavaEE的轻量级应用服务器。可以在任何商业应用中免费使用。 WildFly是一个灵活的、轻量的、强大管理能力的应用程序服...

程序新视界
37分钟前
2
0
Java集合类常见面试知识点总结

Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾。 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java核心技术 https://blog.csdn.net/column/details/21930...

Java技术江湖
40分钟前
6
0
怎么用for循环打出爱心

先上效果图: 这是用*组成的爱心,下面讲讲思路: 首先这个图形可以拆分成三部分:第一部分是上面三行的两个梯形,第二部分是中间三行的长方形,第三部分是最下面的倒三角形。 其实图形拆分好...

INEVITABLE
46分钟前
4
0
用HttpUrlConnection伪造成HttpClient

https://www.jianshu.com/p/27ad06cc39d2

shzwork
51分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部