標籤:
需要解析的xml內容:
<app><dynamic><uploadPhoto>true</uploadPhoto><!-- 是否支援上傳圖片 false代表不支援,true代表支援 --><specifyFriends>true</specifyFriends><!-- 是否支援@好友 false代表不支援,true代表支援 --><sharWx>true</sharWx><!-- 是否支援分享到 false代表不支援,true代表支援 --><emoji>true</emoji><!-- 是否支援表情 false代表不支援,true代表支援 --><score>true</score><!-- 是否支援積分 false代表不支援,true代表支援 --></dynamic><doubt><photo>true</photo><!-- 是否支援圖片 false代表不支援,true代表支援 --><supplementaryQuestion>true</supplementaryQuestion><!-- 是否支援問題補充 false代表不支援,true代表支援 --><collect>true</collect><!-- 是否支援收藏 false代表不支援,true代表支援 --></doubt><courses><elective>true</elective><!-- 是否有選修課 false代表沒有,true代表允許 --></courses></app>
http封裝類:
package com.tudou.activity.work3;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import android.util.Log;public class HttpUtil {public static InputStream getInputStream(String path) {try {URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setDoInput(true);conn.setReadTimeout(3000);conn.setConnectTimeout(3000);conn.setRequestMethod("POST");if (conn.getResponseCode() == 200) {Log.d("mylog", "getResponseCode:" + 200);return conn.getInputStream();}} catch (IOException e) {e.printStackTrace();}return null;}}
使用xmlpull解析xml,直接用json封裝:
package com.tudou.activity.work3;import java.io.IOException;import java.io.InputStream;import java.util.List;import org.json.JSONException;import org.json.JSONObject;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import android.util.Log;public class XmlParser {public static String getXML(InputStream inputStream, String inputEncoding) {JSONObject obj = new JSONObject();try {// Log.d("mylog", "XmlParser" + 200);XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();parser.setInput(inputStream, inputEncoding);int eventType = parser.getEventType();JSONObject obj2 = new JSONObject();JSONObject obj3 = new JSONObject();JSONObject obj4 = new JSONObject();while (eventType != XmlPullParser.END_DOCUMENT) {// Log.d("mylog", "eventType:" + eventType);switch (eventType) {case XmlPullParser.START_DOCUMENT:break;case XmlPullParser.START_TAG:Log.d("mylog", "name:" + parser.getName());if ("uploadPhoto".equals(parser.getName())) {obj2.put(parser.getName(), parser.nextText());} else if ("specifyFriends".equals(parser.getName())) {obj2.put(parser.getName(), parser.nextText());} else if ("sharWx".equals(parser.getName())) {obj2.put(parser.getName(), parser.nextText());} else if ("emoji".equals(parser.getName())) {obj2.put(parser.getName(), parser.nextText());} else if ("score".equals(parser.getName())) {obj2.put(parser.getName(), parser.nextText());} else if ("photo".equals(parser.getName())) {obj3.put(parser.getName(), parser.nextText());} else if ("supplementaryQuestion".equals(parser.getName())) {obj3.put(parser.getName(), parser.nextText());} else if ("collect".equals(parser.getName())) {obj3.put(parser.getName(), parser.nextText());} else if ("elective".equals(parser.getName())) {obj4.put(parser.getName(), parser.nextText());}break;case XmlPullParser.END_TAG:if ("app".equals(parser.getName())) {obj.put("dynamic", obj2);obj.put("doubt", obj3);obj.put("courses", obj4);}break;default:break;}eventType = parser.next();}} catch (XmlPullParserException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (JSONException e) {e.printStackTrace();} finally {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}return obj.toString();}}
activity,此處練手不考慮效率,直接放在主線程中了:
package com.tudou.activity.work3;import com.tudou.activity.R;import android.app.Activity;import android.os.Bundle;import android.util.Log;public class HomeWork3 extends Activity {String path = "http://software.webtrn.cn/cms/res_base/software_webtrn_cn/privacy/config/tyxl/appConfiguration.xml";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.homework3);}@Overrideprotected void onStart() {super.onStart();String result = XmlParser.getXML(HttpUtil.getInputStream(path), "utf-8");Log.d("mylog", "result:" + result);}}
順便貼一個練手的介面。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:ad="http://schemas.android.com/apk/res/android" ad:layout_width="match_parent" ad:layout_height="match_parent" ad:orientation="vertical" > <LinearLayout ad:layout_width="match_parent" ad:layout_height="30dp" ad:background="@drawable/titlebar_bg" ad:orientation="horizontal" > <ImageView ad:layout_width="wrap_content" ad:layout_height="wrap_content" ad:src="@drawable/back_44_44" /> <LinearLayout ad:layout_width="match_parent" ad:layout_height="30dp" ad:gravity="center" > <TextView ad:layout_width="wrap_content" ad:layout_height="wrap_content" ad:text="本地課程" ad:textSize="20sp" /> </LinearLayout> </LinearLayout> <LinearLayout ad:layout_width="match_parent" ad:layout_height="wrap_content" ad:gravity="center_vertical" ad:orientation="horizontal" > <ImageView ad:layout_width="wrap_content" ad:layout_height="wrap_content" ad:src="@drawable/image_default_195_130" /> <LinearLayout ad:layout_width="match_parent" ad:layout_height="wrap_content" ad:orientation="vertical" > <TextView ad:layout_width="wrap_content" ad:layout_height="wrap_content" ad:text="公用組織的變革與發展" ad:textSize="18sp" /> <LinearLayout ad:layout_width="match_parent" ad:layout_height="wrap_content" ad:orientation="horizontal" > <TextView ad:layout_width="wrap_content" ad:layout_height="wrap_content" ad:text="學習進度:" ad:textColor="#b6b6b6" ad:textSize="12sp" /> <ProgressBar style="?android:attr/progressBarStyleHorizontal" ad:layout_width="100dp" ad:layout_height="wrap_content" ad:secondaryProgress="50" ad:max="100" ad:progress="10" /> <TextView ad:layout_width="wrap_content" ad:layout_height="wrap_content" ad:text="10%" ad:textColor="#b6b6b6" ad:textSize="12sp" /> </LinearLayout> </LinearLayout> </LinearLayout> <LinearLayout ad:layout_width="match_parent" ad:layout_height="wrap_content" ad:layout_marginTop="10dp" ad:gravity="center" ad:orientation="horizontal" > <Button ad:layout_width="80dp" ad:layout_height="30dp" ad:background="@drawable/coursedetail_startstudy_600_68" ad:text="離線緩衝" /> <Button ad:layout_width="80dp" ad:layout_height="30dp" ad:background="@drawable/coursedetail_startstudy_600_68" ad:layout_marginLeft="20dp" ad:text="開始學習" /> </LinearLayout> <TextView ad:layout_width="match_parent" ad:layout_height="1dp" ad:background="#b6b6b6" ad:layout_marginTop="10dp"/></LinearLayout>
android使用xmlpull方式解析xml樣本