XmlPullParser
生活随笔
收集整理的這篇文章主要介紹了
XmlPullParser
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
xml文件可以用戶儲存我們的數(shù)據(jù),或者作為配置文件等。xml文件可以位于res/xml目錄下面,例如我們在該目錄下放置一個xml文件words.xml,如下:
[html] view plaincopy <?xml?version="1.0"?encoding="utf-8"?>?? <ListItems?desrciption="Put?the?entry?as?the?item?in?Android?List">?? ????<Entry?value="One"?/>?? ????<Entry?value="Two"?/>?? ????<Entry?value="Three"?/>?? ????<Entry?value="Four"?/>?? ????<Entry?value="Five"?/>?? ????<Entry?value="Six"?/>?? ????<entry>Hello</entry>?? </ListItems>??
XmlPullParser通過next(),依次向下檢查 XmlPullParser是事件驅(qū)動,如果檢測到END_DOCUMENT,應(yīng)當(dāng)停止繼續(xù)檢測 XmlPullParser是事件驅(qū)動,當(dāng)檢測到START_TAG,可以讀出<AAAA bbbb=xxxx c=yyyyy>的內(nèi)容,其中AAAA可通過getName()來獲取,屬性的個數(shù),可通過getAttributeCount()獲取,屬性的名詞和內(nèi)容可分別通過getAttributeName(index)和getAttributeValue(index)來獲取。 XmlPullParser是事件驅(qū)動,如果是END_TAG,則為</AAAA>,可以通過getName()來獲得AAAA的內(nèi)容 對于<entry>Hello</entry>這種方式,如果要獲取中間的數(shù)值,則事件為XmlPullParser.TEXT,可通過getText()來獲取內(nèi)容。 由于xml文件可能書寫不正確,或者我們在解釋的過程中處理不正確,應(yīng)當(dāng)使用異常捕獲的方式來處理
/*?1.?XmlPullParser通過next(),依次向下檢查? ?*?2.?XmlPullParser是事件驅(qū)動,如果檢測到?END_DOCUMENT,應(yīng)當(dāng)停止繼續(xù)檢測? ?*?3.?XmlPullParser是事件驅(qū)動,當(dāng)檢測到START_TAG,可以讀出<AAAA?bbbb=xxxx?c=yyyyy>的內(nèi)容,其中AAAA可通過getName()來獲取,屬性的個數(shù),可通過getAttributeCount()獲取,屬性的名詞和內(nèi)容可分別通過getAttributeName(index)和getAttributeValue(index)來獲取。? ?*?4.?XmlPullParser?是事件驅(qū)動,如果是END_TAG,則為</AAAA>,可以通過getName()來獲得AAAA的內(nèi)容? ?*?5.?對于<entry>Hello</entry>這種方式,如果要獲取中間的數(shù)值,則事件為XmlPullParser.TEXT,?可通過getText()來獲取內(nèi)容。? ?*?6.?由于xml文件可能書寫不正確,或者我們在解釋的過程中處理不正確,應(yīng)當(dāng)使用異常捕獲的方式來處理? */?? public?class?Chapter20Test3?extends?ListActivity{?? ????private?ArrayList<String>?items?=?new?ArrayList<String>();?? ????protected?void?onCreate(Bundle?savedInstanceState)?{?? ????????super.onCreate(savedInstanceState);?? ?????????? ????????/*步驟1:進(jìn)行特定xml文件words的解析,對應(yīng)第6點,應(yīng)采用異常捕獲防止程序出錯*/??? ????????try{?? ????????????/*?步驟2:獲取xml文件,并給給出XmlPullParser對象*/???? ????????????XmlPullParser?xpp?=?getResources().getXml(R.xml.words);?? ????????????/*?步驟3:通過循環(huán),逐步解析XML,直至xml文件結(jié)束,對應(yīng)第1點和第2點*/??? ????????????while(xpp.getEventType()!=XmlPullParser.END_DOCUMENT){?? ????????????????/*?步驟4:獲取目標(biāo)ListItems的解析,并將之用method:ListItems來處理,對應(yīng)第3點?*/?? ????????????????if(xpp.getEventType()?==?XmlPullParser.START_TAG){?? ????????????????????if(xpp.getName().equals("ListItems")){?? ????????????????????????getItems(xpp);?? ????????????????????}?? ????????????????}?? ????????????????xpp.next();?? ????????????}?? ????????}catch(Throwable?t){?? ????????????Toast.makeText(this,?"Failed:"?+?t.toString(),?2000).show();?? ????????}?? ????????setListAdapter(new?ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,items));?? ????}?? ?????? ????/*?解析<ListItems?...?>....?</Listitem>的內(nèi)容,獲取每個entry的value的值,注意對異常的處理*/?? ????private?void?getItems(XmlPullParser?xpp)?throws?Throwable{?? ????????while(true){?? ????????????xpp.next();?? ????????????/*<ListItems>?...</ListItems>的內(nèi)容已經(jīng)檢索完畢,或者文件結(jié)束,都退出處理*/?? ????????????if((xpp.getEventType()?==?XmlPullParser.END_TAG?&&?xpp.getName().equals("ListItems"))??? ??????????????||?xpp.getEventType()?==?XmlPullParser.END_DOCUMENT)?? ????????????????break;?? ?? ????????????if(xpp.getEventType()==XmlPullParser.START_TAG)?{?? ????????????????/*觀測點:對第3點的處理,讀出屬性的名字和數(shù)值*/?? ????????????????if(xpp.getName().equals("Entry")){?? ????????????????????for(int?i?=?0;?i?<?xpp.getAttributeCount()?;?i?++){?? ????????????????????????if(xpp.getAttributeName(i).equals("value")){?? ????????????????????????????items.add(xpp.getAttributeValue(i));?? ????????????????????????}?? ????????????????????}?? ????????????????}?? ????????????????/*觀測點:對第5點的處理,處理<name>value</name>*/?? ????????????????if(xpp.getName().equals("entry")){?? ????????????????????xpp.next();?? ????????????????????if(xpp.getEventType()==XmlPullParser.TEXT)?? ????????????????????????items.add(xpp.getText());?? ????????????????}?? ????????????}?? ????????}?? ?? ????}?? ?? ????@Override?? ????protected?void?onListItemClick(ListView?l,?View?v,?int?position,?long?id)?{?? ????????super.onListItemClick(l,?v,?position,?id);?? ????????Toast.makeText(this,?items.get(position),?Toast.LENGTH_LONG).show();?? ????}?? ?????? }?
XmlPullParser可以用于解釋xml文件。這里有兩種xml的常見格式:<entry>Hello</entry>和<Entry value="Six" />,在Android XML中使用后者,而這種方式在XmlPullParser中處理也非常方便。它的使用方式歸納如下:
下面的例子,我們將上述的words.xml分析處理,將Entry數(shù)值作為listActivity的每個item的內(nèi)容。
[java] view plaincopy總結(jié)
以上是生活随笔為你收集整理的XmlPullParser的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 白银etf基金都有哪几只
- 下一篇: 颠覆行业惯例!一加Ace 2V搭载天玑9