中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用PULL解析XML文件時循環過程的案例

發布時間:2021-03-12 11:40:26 來源:億速云 閱讀:203 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關使用PULL解析XML文件時循環過程的案例的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

XML文件內容如下(名字為"teacher.xml") <?xml version="1.0" encoding="UTF-8"?> zhangsan 1912000 lisi 23 8000使用PULL解析XML文件的代碼:

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 PullTry {
public static void main(String[] args) {
List datas = null;
Teacher teacher = null;
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(new FileReader("teacher.xml"));
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagName = parser.getName();
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
// 創建list
datas = new ArrayList<>();
break;
case XmlPullParser.START_TAG:
// 創建Teacher對象
if ("teacher".equals(tagName)) {
teacher = new Teacher();
} else if ("name".equals(tagName)) {
teacher.setName(parser.nextText());
} else if ("age".equals(tagName)) {
teacher.setAge(Integer.parseInt(parser.nextText()));
} else if ("money".equals(tagName)) {
teacher.setMoney(Double.parseDouble(parser.nextText()));
}
break;
case XmlPullParser.END_TAG:
// 把對象添加進List集合中
if ("teacher".equals(tagName)) {
datas.add(teacher);
}
break;
default:
break;
}
// 將eventType指向下一步...
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 0; i < datas.size(); i++) {
System.out.println(datas.get(i));
}

System.out.println(count);
}
}

這里主要看while循環內部是如何讀取xml文件的..

首先循環的條件是eventType != XmlPullParser.END_DOCUMENT

如果eventType不等于XmlPullParser.END_DOCUMENT,就進行下一次循環。這里eventType的值有11種,但用到的只有前5種。

public static final int START_DOCUMENT = 0;
public static final int END_DOCUMENT = 1;
public static final int START_TAG = 2;
public static final int END_TAG = 3;
public static final int TEXT = 4;

為了觀察循環執行的過程,我在循環內添加了一行代碼:

System.out.println(eventType+"===第"+count+"次循環==="+tagName);

其中count是循環運行的次數。添加這行代碼后控制臺顯示出如下信息:

0===第1次循環===null 
2===第2次循環===teachers 
4===第3次循環===null 
2===第4次循環===teacher 
4===第5次循環===null 
2===第6次循環===name 
4===第7次循環===null 
2===第8次循環===age 
4===第9次循環===null 
2===第10次循環===money 
4===第11次循環===null 
3===第12次循環===teacher 
4===第13次循環===null 
2===第14次循環===teacher 
4===第15次循環===null 
2===第16次循環===name 
4===第17次循環===null 
2===第18次循環===age 
4===第19次循環===null 
2===第20次循環===money 
4===第21次循環===null 
3===第22次循環===teacher 
4===第23次循環===null 
3===第24次循環===teachers Teacher [name=zhangsan, age=19, money=12000.0] Teacher [name=lisi, age=23, money=8000.0] 24

先說一下,只有在下一次eventType值為4(也即下一次循環時讀取了TEXT)的情況下,讀取的內容parser.nextText()不為空

結合xml文件來看,可以得出結論:

第一次循環,eventType值為0,也即START_DOCUMENT的情況。此時tagName值為空。

第二次循環,eventType值為2,也即START_TAG的情況。此時tagName值為teachers。也就是說此時讀取到了這個標簽。由于下一次eventType值為4,也即TEXT的情況,所以此次讀取的內容parser.nextText()值為標簽到標簽中間的文本內容!也就是一個/n加一個/t。

第三次循環,eventType值為4,也即TEXT的情況。此時tagName值為空。

第四次循環,eventType值為2,也即START_TAG的情況。此時tagName值為teacher。也就是說此時讀取到了這個標簽。注意:此時if語句判斷出"teacher".equals(tagName)返回值為true,會執行下面的teacher = new Teacher();來創建一個Teacher類的對象。由于下一次eventType值為4,也即TEXT的情況,所以此次讀取的內容parser.nextText()值為標簽到標簽中間的文本內容,也就是一個/n加兩個/t。

第五次循環,eventType值為4,也即TEXT的情況。此時tagName值為空。

第六次循環,eventType值為2,也即START_TAG的情況。此時tagName值為name。也就是說此時讀取到了這個標簽。注意:此時if語句判斷出"name".equals(tagName)返回值為true,會執行下面的teacher.setName(parser.nextText());,這里的parser.nextText()值應該是zhangsan。這樣就把zhangsan賦值給了這個teacher對象的name屬性。

第七次循環,eventType值為4,也即TEXT的情況。此時tagName值為空。

后面好像不用講什么了,都是一個意思。

ps: 每一次遇到一個Teacher標簽(Teacher標簽是一個子標簽,Teachers是父標簽)都會創建一個對象,接著把里面的孫標簽(name、age和money)賦值到這個對象的屬性中。

ps2: 這個例子中孫標簽中的endtag不會被讀取。(就是這種..)

xbox: eventType值為3的情況只有三種,這三種情況下tagName值分別為teacher、teacher和teachers。進一步說明了ps2是對的.....

感謝各位的閱讀!關于“使用PULL解析XML文件時循環過程的案例”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

崇信县| 宁武县| 阿瓦提县| 阿拉善左旗| 左云县| 泊头市| 尉犁县| 瑞金市| 左权县| 商洛市| 平定县| 彭泽县| 楚雄市| 庆安县| 大悟县| 静海县| 黄浦区| 杭锦后旗| 许昌县| 枣阳市| 昆明市| 二手房| 清水河县| 肇州县| 大石桥市| 武川县| 察哈| 噶尔县| 资源县| 龙川县| 吉首市| 霍邱县| 永济市| 南充市| 夹江县| 乐安县| 元氏县| 仁化县| 阳城县| 新泰市| 堆龙德庆县|