這篇文章給大家分享的是有關(guān)使用PULL解析XML文件時循環(huán)過程的案例的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站制作、成都網(wǎng)站建設(shè)與策劃設(shè)計,志丹網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:志丹等地區(qū)。志丹做網(wǎng)站價格咨詢:028-86922220XML文件內(nèi)容如下(名字為"teacher.xml") 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: // 創(chuàng)建list datas = new ArrayList<>(); break; case XmlPullParser.START_TAG: // 創(chuàng)建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: // 把對象添加進(jìn)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循環(huán)內(nèi)部是如何讀取xml文件的..
首先循環(huán)的條件是eventType != XmlPullParser.END_DOCUMENT
如果eventType不等于XmlPullParser.END_DOCUMENT,就進(jìn)行下一次循環(huán)。這里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;
為了觀察循環(huán)執(zhí)行的過程,我在循環(huán)內(nèi)添加了一行代碼:
System.out.println(eventType+"===第"+count+"次循環(huán)==="+tagName);
其中count是循環(huán)運(yùn)行的次數(shù)。添加這行代碼后控制臺顯示出如下信息:
0===第1次循環(huán)===null 2===第2次循環(huán)===teachers 4===第3次循環(huán)===null 2===第4次循環(huán)===teacher 4===第5次循環(huán)===null 2===第6次循環(huán)===name 4===第7次循環(huán)===null 2===第8次循環(huán)===age 4===第9次循環(huán)===null 2===第10次循環(huán)===money 4===第11次循環(huán)===null 3===第12次循環(huán)===teacher 4===第13次循環(huán)===null 2===第14次循環(huán)===teacher 4===第15次循環(huán)===null 2===第16次循環(huán)===name 4===第17次循環(huán)===null 2===第18次循環(huán)===age 4===第19次循環(huán)===null 2===第20次循環(huán)===money 4===第21次循環(huán)===null 3===第22次循環(huán)===teacher 4===第23次循環(huán)===null 3===第24次循環(huán)===teachers Teacher [name=zhangsan, age=19, money=12000.0] Teacher [name=lisi, age=23, money=8000.0] 24
先說一下,只有在下一次eventType值為4(也即下一次循環(huán)時讀取了TEXT)的情況下,讀取的內(nèi)容parser.nextText()不為空
結(jié)合xml文件來看,可以得出結(jié)論:
第一次循環(huán),eventType值為0,也即START_DOCUMENT的情況。此時tagName值為空。
第二次循環(huán),eventType值為2,也即START_TAG的情況。此時tagName值為teachers。也就是說此時讀取到了這個標(biāo)簽。由于下一次eventType值為4,也即TEXT的情況,所以此次讀取的內(nèi)容parser.nextText()值為標(biāo)簽到標(biāo)簽中間的文本內(nèi)容!也就是一個/n加一個/t。
第三次循環(huán),eventType值為4,也即TEXT的情況。此時tagName值為空。
第四次循環(huán),eventType值為2,也即START_TAG的情況。此時tagName值為teacher。也就是說此時讀取到了這個標(biāo)簽。注意:此時if語句判斷出"teacher".equals(tagName)返回值為true,會執(zhí)行下面的teacher = new Teacher();來創(chuàng)建一個Teacher類的對象。由于下一次eventType值為4,也即TEXT的情況,所以此次讀取的內(nèi)容parser.nextText()值為標(biāo)簽到標(biāo)簽中間的文本內(nèi)容,也就是一個/n加兩個/t。
第五次循環(huán),eventType值為4,也即TEXT的情況。此時tagName值為空。
第六次循環(huán),eventType值為2,也即START_TAG的情況。此時tagName值為name。也就是說此時讀取到了這個標(biāo)簽。注意:此時if語句判斷出"name".equals(tagName)返回值為true,會執(zhí)行下面的teacher.setName(parser.nextText());,這里的parser.nextText()值應(yīng)該是zhangsan。這樣就把zhangsan賦值給了這個teacher對象的name屬性。
第七次循環(huán),eventType值為4,也即TEXT的情況。此時tagName值為空。
后面好像不用講什么了,都是一個意思。
ps: 每一次遇到一個Teacher標(biāo)簽(Teacher標(biāo)簽是一個子標(biāo)簽,Teachers是父標(biāo)簽)都會創(chuàng)建一個對象,接著把里面的孫標(biāo)簽(name、age和money)賦值到這個對象的屬性中。
ps2: 這個例子中孫標(biāo)簽中的endtag不會被讀取。(就是這種..)
xbox: eventType值為3的情況只有三種,這三種情況下tagName值分別為teacher、teacher和teachers。進(jìn)一步說明了ps2是對的.....
感謝各位的閱讀!關(guān)于“使用PULL解析XML文件時循環(huán)過程的案例”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!