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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android,XML解析

發布時間:2024/1/17 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android,XML解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

XML解析三種方式

DOM

通用性強,它會將XML文件的所有內容讀取到內存中,然后允許您使用DOM API遍歷XML樹、檢索所需的數據;

簡單直觀,但需要將文檔讀取到內存,并不太適合移動設備;

SAX

SAX是一個解析速度快并且占用內存少的xml解析器;

采用事件驅動,它并不需要解析整個文檔;

實現:繼承DefaultHandler,覆寫startElement、endElement、characters等方法;

PULL

Android自帶的XML解析器,和SAX基本類似,也是事件驅動,不同的是PULL事件返回的是數值型;推薦使用。

?

PULL解析XML核心代碼

[java]?view plaincopy
  • XmlPullParser?parser?=?XmlPullParserFactory.newInstance().newPullParser();??
  • parser.setInput(fileInputStream,?“utf-8”);//設置數據源編碼??
  • int?eventCode?=?parser.getEventType();//獲取事件類型??
  • while(eventCode?!=?XmlPullParser.END_DOCUMENT)??{?????
  • ????switch?(eventCode){?????
  • ????????case?XmlPullParser.START_DOCUMENT:?//開始讀取XML文檔????
  • ????????//實例化集合類????
  • ????????break;?????
  • ????case?XmlPullParser.START_TAG://開始讀取某個標簽???????
  • ????????if("person".equals(parser.getName()))?{?????
  • ????????//通過getName判斷讀到哪個標簽,然后通過nextText()獲取文本節點值,或通過getAttributeValue(i)獲取屬性節點值??
  • ????????}?????
  • ????????break;??
  • ????case?XmlPullParser.END_TAG://讀完一個Person,可以將其添加到集合類中??
  • ????????break;??
  • ????}??
  • ????parser.next();??
  • }??
  • PULL解析XML示例方法

    Java方法 [java]?view plaincopy
  • public?static?List<Person>?readXML(InputStream?inStream)?{??
  • ????XmlPullParser?parser?=?Xml.newPullParser();??
  • ????try?{??
  • ????????parser.setInput(inStream,?"UTF-8");//?設置數據源編碼??
  • ????????int?eventType?=?parser.getEventType();//?獲取事件類型??
  • ????????Person?currentPerson?=?null;??
  • ????????List<Person>?persons?=?null;??
  • ????????while?(eventType?!=?XmlPullParser.END_DOCUMENT)?{??
  • ????????????switch?(eventType)?{??
  • ????????????case?XmlPullParser.START_DOCUMENT://?文檔開始事件,可以進行數據初始化處理??
  • ????????????????persons?=?new?ArrayList<Person>();//?實例化集合類??
  • ????????????????break;??
  • ????????????case?XmlPullParser.START_TAG://開始讀取某個標簽??
  • ????????????????//通過getName判斷讀到哪個標簽,然后通過nextText()獲取文本節點值,或通過getAttributeValue(i)獲取屬性節點值??
  • ????????????????String?name?=?parser.getName();??
  • ????????????????if?(name.equalsIgnoreCase("person"))?{??
  • ????????????????????currentPerson?=?new?Person();??
  • ????????????????????currentPerson.setId(new?Integer(parser.getAttributeValue(null,?"id")));??
  • ????????????????}?else?if?(currentPerson?!=?null)?{??
  • ????????????????????if?(name.equalsIgnoreCase("name"))?{??
  • ????????????????????????currentPerson.setName(parser.nextText());//?如果后面是Text元素,即返回它的值??
  • ????????????????????}?else?if?(name.equalsIgnoreCase("age"))?{??
  • ????????????????????????currentPerson.setAge(new?Short(parser.nextText()));??
  • ????????????????????}??
  • ????????????????}??
  • ????????????????break;??
  • ????????????case?XmlPullParser.END_TAG://?結束元素事件??
  • ????????????????//讀完一個Person,可以將其添加到集合類中??
  • ????????????????if?(parser.getName().equalsIgnoreCase("person")&&?currentPerson?!=?null)?{??
  • ????????????????????persons.add(currentPerson);??
  • ????????????????????currentPerson?=?null;??
  • ????????????????}??
  • ????????????????break;??
  • ????????????}??
  • ????????????eventType?=?parser.next();??
  • ????????}??
  • ????????inStream.close();??
  • ????????return?persons;??
  • ????}?catch?(Exception?e)?{??
  • ????????e.printStackTrace();??
  • ????}??
  • ????return?null;??
  • }??
  • 應用

    XML文件 [html]?view plaincopy
  • <?xml?version="1.0"?encoding="UTF-8"?>??
  • <persons>??
  • ????<person?id="23">??
  • ????????<name>孫洋洋</name>??
  • ????????<age>30</age>??
  • ????</person>??
  • ????<person?id="20">??
  • ????????<name>孫彬彬</name>??
  • ????????<age>25</age>??
  • ????</person>??
  • </persons>??
  • Activity文件 [java]?view plaincopy
  • package?com.app.data;??
  • ??
  • import?java.io.BufferedWriter;??
  • import?java.io.File;??
  • import?java.io.FileInputStream;??
  • import?java.io.FileNotFoundException;??
  • import?java.io.FileOutputStream;??
  • import?java.io.InputStream;??
  • import?java.io.OutputStreamWriter;??
  • import?java.net.HttpURLConnection;??
  • import?java.net.URL;??
  • import?java.util.ArrayList;??
  • import?java.util.HashMap;??
  • import?java.util.List;??
  • ??
  • import?org.xmlpull.v1.XmlPullParser;??
  • import?org.xmlpull.v1.XmlPullParserException;??
  • import?org.xmlpull.v1.XmlPullParserFactory;??
  • ??
  • import?com.app.other.Person;??
  • ??
  • import?android.app.Activity;??
  • import?android.os.Bundle;??
  • import?android.util.Xml;??
  • import?android.widget.TextView;??
  • ??
  • public?class?XMLActivity?extends?Activity?{??
  • ????@Override??
  • ????protected?void?onCreate(Bundle?savedInstanceState)?{??
  • ????????//?TODO?Auto-generated?method?stub??
  • ????????super.onCreate(savedInstanceState);??
  • ????????setContentView(R.layout.activity_xml);??
  • ??????????
  • ????????StringBuilder?sBuilder?=?new?StringBuilder();??
  • ????????File?xmlFile?=?new?File("/mnt/sdcard/App/person.xml");??
  • ????????try?{??
  • ????????????FileInputStream?inputStream?=?new?FileInputStream(xmlFile);??
  • //??????????URL?url?=?new?URL("http://10.0.2.2:8888/android/person.xml");??
  • //??????????HttpURLConnection?urlConnection?=?(HttpURLConnection)?url.openConnection();??
  • //??????????InputStream?inputStream?=?urlConnection.getInputStream();??
  • ????????????List<Person>?list?=?readXML(inputStream);??
  • ????????????for?(int?i?=?0;?i?<?list.size();?i++)?{??
  • ????????????????Person?person?=?list.get(i);??
  • ????????????????sBuilder.append("第-"?+?i?+?"-條記錄:\n");??
  • ????????????????sBuilder.append("getName--"?+?person.getName()?+?"\n");??
  • ????????????????sBuilder.append("getAge--"?+?person.getAge()?+?"\n");??
  • ????????????????sBuilder.append("getId--"?+?person.getId()?+?"\n");??
  • ????????????}??
  • ????????????inputStream.close();??
  • ????????}?catch?(Exception?e)?{??
  • ????????????//?TODO?Auto-generated?catch?block??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????TextView?textView?=?(TextView)findViewById(R.id.textView2);??
  • ????????textView.setText(sBuilder);??
  • ????}??
  • ??
  • ????public?static?List<Person>?readXML(InputStream?inStream)?{??
  • ????????XmlPullParser?parser?=?Xml.newPullParser();??
  • ????????try?{??
  • ????????????parser.setInput(inStream,?"UTF-8");//?設置數據源編碼??
  • ????????????int?eventType?=?parser.getEventType();//?獲取事件類型??
  • ????????????Person?currentPerson?=?null;??
  • ????????????List<Person>?persons?=?null;??
  • ????????????while?(eventType?!=?XmlPullParser.END_DOCUMENT)?{??
  • ????????????????switch?(eventType)?{??
  • ????????????????case?XmlPullParser.START_DOCUMENT://?文檔開始事件,可以進行數據初始化處理??
  • ????????????????????persons?=?new?ArrayList<Person>();//?實例化集合類??
  • ????????????????????break;??
  • ????????????????case?XmlPullParser.START_TAG://開始讀取某個標簽??
  • ????????????????????//通過getName判斷讀到哪個標簽,然后通過nextText()獲取文本節點值,或通過getAttributeValue(i)獲取屬性節點值??
  • ????????????????????String?name?=?parser.getName();??
  • ????????????????????if?(name.equalsIgnoreCase("person"))?{??
  • ????????????????????????currentPerson?=?new?Person();??
  • ????????????????????????currentPerson.setId(new?Integer(parser.getAttributeValue(null,?"id")));??
  • ????????????????????}?else?if?(currentPerson?!=?null)?{??
  • ????????????????????????if?(name.equalsIgnoreCase("name"))?{??
  • ????????????????????????????currentPerson.setName(parser.nextText());//?如果后面是Text元素,即返回它的值??
  • ????????????????????????}?else?if?(name.equalsIgnoreCase("age"))?{??
  • ????????????????????????????currentPerson.setAge(new?Short(parser.nextText()));??
  • ????????????????????????}??
  • ????????????????????}??
  • ????????????????????break;??
  • ????????????????case?XmlPullParser.END_TAG://?結束元素事件??
  • ????????????????????//讀完一個Person,可以將其添加到集合類中??
  • ????????????????????if?(parser.getName().equalsIgnoreCase("person")&&?currentPerson?!=?null)?{??
  • ????????????????????????persons.add(currentPerson);??
  • ????????????????????????currentPerson?=?null;??
  • ????????????????????}??
  • ????????????????????break;??
  • ????????????????}??
  • ????????????????eventType?=?parser.next();??
  • ????????????}??
  • ????????????inStream.close();??
  • ????????????return?persons;??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????}??
  • ????????return?null;??
  • ????}??
  • }??
  • XML布局文件 [html]?view plaincopy
  • <?xml?version="1.0"?encoding="utf-8"?>??
  • <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
  • ????android:layout_width="match_parent"??
  • ????android:layout_height="match_parent"??
  • ????android:orientation="vertical"??
  • ????android:padding="15dp"?>??
  • ??
  • ????<TextView??
  • ????????android:id="@+id/textView1"??
  • ????????android:layout_width="wrap_content"??
  • ????????android:layout_height="wrap_content"??
  • ????????android:text="XML文件讀取"??
  • ????????android:layout_gravity="center_horizontal"?/>??
  • ??
  • ????<TextView??
  • ????????android:id="@+id/textView2"??
  • ????????android:layout_width="wrap_content"??
  • ????????android:layout_height="wrap_content"??
  • ????????android:text="TextView"?/>??
  • ??
  • </LinearLayout>??
  • XML文件位置 ? 執行結果:

    總結

    以上是生活随笔為你收集整理的Android,XML解析的全部內容,希望文章能夠幫你解決所遇到的問題。

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