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 + "]";
}
}
相關文章
相關標籤/搜索