pull解析

第一种:
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 + "]";
}
}
相关文章
相关标签/搜索