日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

XmlPullParser

發(fā)布時間:2023/12/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XmlPullParser 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
xml文件可以用戶儲存我們的數據,或者作為配置文件等。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可以用于解釋xml文件。這里有兩種xml的常見格式:<entry>Hello</entry>和<Entry value="Six" />,在Android XML中使用后者,而這種方式在XmlPullParser中處理也非常方便。它的使用方式歸納如下:

  • XmlPullParser通過next(),依次向下檢查
  • XmlPullParser是事件驅動,如果檢測到END_DOCUMENT,應當停止繼續(xù)檢測
  • XmlPullParser是事件驅動,當檢測到START_TAG,可以讀出<AAAA bbbb=xxxx c=yyyyy>的內容,其中AAAA可通過getName()來獲取,屬性的個數,可通過getAttributeCount()獲取,屬性的名詞和內容可分別通過getAttributeName(index)和getAttributeValue(index)來獲取。
  • XmlPullParser是事件驅動,如果是END_TAG,則為</AAAA>,可以通過getName()來獲得AAAA的內容
  • 對于<entry>Hello</entry>這種方式,如果要獲取中間的數值,則事件為XmlPullParser.TEXT,可通過getText()來獲取內容。
  • 由于xml文件可能書寫不正確,或者我們在解釋的過程中處理不正確,應當使用異常捕獲的方式來處理
  • 下面的例子,我們將上述的words.xml分析處理,將Entry數值作為listActivity的每個item的內容。

    [java] view plaincopy
  • /*?1.?XmlPullParser通過next(),依次向下檢查?
  • ?*?2.?XmlPullParser是事件驅動,如果檢測到?END_DOCUMENT,應當停止繼續(xù)檢測?
  • ?*?3.?XmlPullParser是事件驅動,當檢測到START_TAG,可以讀出<AAAA?bbbb=xxxx?c=yyyyy>的內容,其中AAAA可通過getName()來獲取,屬性的個數,可通過getAttributeCount()獲取,屬性的名詞和內容可分別通過getAttributeName(index)和getAttributeValue(index)來獲取。?
  • ?*?4.?XmlPullParser?是事件驅動,如果是END_TAG,則為</AAAA>,可以通過getName()來獲得AAAA的內容?
  • ?*?5.?對于<entry>Hello</entry>這種方式,如果要獲取中間的數值,則事件為XmlPullParser.TEXT,?可通過getText()來獲取內容。?
  • ?*?6.?由于xml文件可能書寫不正確,或者我們在解釋的過程中處理不正確,應當使用異常捕獲的方式來處理?
  • */??
  • public?class?Chapter20Test3?extends?ListActivity{??
  • ????private?ArrayList<String>?items?=?new?ArrayList<String>();??
  • ????protected?void?onCreate(Bundle?savedInstanceState)?{??
  • ????????super.onCreate(savedInstanceState);??
  • ??????????
  • ????????/*步驟1:進行特定xml文件words的解析,對應第6點,應采用異常捕獲防止程序出錯*/???
  • ????????try{??
  • ????????????/*?步驟2:獲取xml文件,并給給出XmlPullParser對象*/????
  • ????????????XmlPullParser?xpp?=?getResources().getXml(R.xml.words);??
  • ????????????/*?步驟3:通過循環(huán),逐步解析XML,直至xml文件結束,對應第1點和第2點*/???
  • ????????????while(xpp.getEventType()!=XmlPullParser.END_DOCUMENT){??
  • ????????????????/*?步驟4:獲取目標ListItems的解析,并將之用method:ListItems來處理,對應第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>的內容,獲取每個entry的value的值,注意對異常的處理*/??
  • ????private?void?getItems(XmlPullParser?xpp)?throws?Throwable{??
  • ????????while(true){??
  • ????????????xpp.next();??
  • ????????????/*<ListItems>?...</ListItems>的內容已經檢索完畢,或者文件結束,都退出處理*/??
  • ????????????if((xpp.getEventType()?==?XmlPullParser.END_TAG?&&?xpp.getName().equals("ListItems"))???
  • ??????????????||?xpp.getEventType()?==?XmlPullParser.END_DOCUMENT)??
  • ????????????????break;??
  • ??
  • ????????????if(xpp.getEventType()==XmlPullParser.START_TAG)?{??
  • ????????????????/*觀測點:對第3點的處理,讀出屬性的名字和數值*/??
  • ????????????????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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。