- XmlResourceParser xmlParser = this.getResources().getXml(R.xml.XXX);
b.在res/xml、res/raw目錄下:
- InputStream inputStream = this.getResources().openRawResource(R.xml.XXX);
- InputStream inputStream = getResources().getAssets().open(fileName);
d.在應用指定目錄下(SDcard,應用data目錄等):
- // path路徑根據實際項目修改,此次獲取SDcard根目錄
- String path = Environment.getExternalStorageDirectory().toString();
- File xmlFlie = new File(path+fileName);
- InputStream inputStream = new FileInputStream(xmlFlie);
- /**
- * 讀取url的xml資源 轉成String
- * @param url
- * @return 返回 讀取url的xml字符串
- */
- public String getStringByUrl(String url) {
- String outputString = "";
- // DefaultHttpClient
- DefaultHttpClient httpclient = new DefaultHttpClient();
- // HttpGet
- HttpGet httpget = new HttpGet(url);
- // ResponseHandler
- ResponseHandler<String> responseHandler = new BasicResponseHandler();
- try {
- outputString = httpclient.execute(httpget, responseHandler);
- outputString = new String(outputString.getBytes("ISO-8859-1"), "utf-8"); // 解決中文亂碼
- Log.i("HttpClientConnector", "連接成功");
- } catch (Exception e) {
- Log.i("HttpClientConnector", "連接失敗");
- e.printStackTrace();
- }
- httpclient.getConnectionManager().shutdown();
- return outputString;
- }
- try {
- //開始解析事件
- int eventType = parser.getEventType();
- //處理事件,不碰到文檔結束就一直處理
- while (eventType != XmlPullParser.END_DOCUMENT) {
- //因爲定義了一堆靜態常量,所以這裏可以用switch
- switch (eventType) {
- case XmlPullParser.START_DOCUMENT:
- // 不做任何操作或初開始化數據
- break;
- case XmlPullParser.START_TAG:
- // 解析XML節點數據
- // 獲取當前標籤名字
- String tagName = parser.getName();
- if(tagName.equals("XXXTAGXXX")){
- // 通過getAttributeValue 和 netxText解析節點的屬性值和節點值
- }
- break;
- case XmlPullParser.END_TAG:
- // 單節點完成,可往集合裏邊添加新的數據
- break;
- case XmlPullParser.END_DOCUMENT:
- break;
- }
- // 別忘了用next方法處理下一個事件,不然就會死循環
- eventType = parser.next();
- }
- } catch (XmlPullParserException e) {
- e.printStackTrace();
- }catch (IOException e) {
- e.printStackTrace();
- }
- /**
- * 同樣刪除首行,才能解析成功,
- * @param fileName
- * @return 返回xml文件的inputStream
- */
- public InputStream getInputStreamFromAssets(String fileName){
- try {
- InputStream inputStream = getResources().getAssets().open(fileName);
- return inputStream;
- } catch (IOException e) {
- e.printStackTrace();
- }
- return null;
- }
- /**
- * 讀取XML文件,xml文件放到res/xml文件夾中,若XML爲本地文件,則推薦該方法
- *
- * @param fileName
- * @return : 讀取到res/xml文件夾下的xml文件,返回XmlResourceParser對象(XmlPullParser的子類)
- */
- public XmlResourceParser getXMLFromResXml(String fileName){
- XmlResourceParser xmlParser = null;
- try {
- //*/
- // xmlParser = this.getResources().getAssets().openXmlResourceParser("assets/"+fileName); // 失敗,找不到文件
- xmlParser = this.getResources().getXml(R.xml.provinceandcity);
- /*/
- // xml文件在res目錄下 也可以用此方法返回inputStream
- InputStream inputStream = this.getResources().openRawResource(R.xml.provinceandcity);
- /*/
- return xmlParser;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return xmlParser;
- }
- /**
- * 讀取url的xml資源 轉成String
- * @param url
- * @return 返回 讀取url的xml字符串
- */
- public String getStringByUrl(String url) {
- String outputString = "";
- // DefaultHttpClient
- DefaultHttpClient httpclient = new DefaultHttpClient();
- // HttpGet
- HttpGet httpget = new HttpGet(url);
- // ResponseHandler
- ResponseHandler<String> responseHandler = new BasicResponseHandler();
- try {
- outputString = httpclient.execute(httpget, responseHandler);
- outputString = new String(outputString.getBytes("ISO-8859-1"), "utf-8"); // 解決中文亂碼
- Log.i("HttpClientConnector", "連接成功");
- } catch (Exception e) {
- Log.i("HttpClientConnector", "連接失敗");
- e.printStackTrace();
- }
- httpclient.getConnectionManager().shutdown();
- return outputString;
- }
- /**
- * 解析SDcard xml文件
- * @param fileName
- * @return 返回xml文件的inputStream
- */
- public InputStream getInputStreamFromSDcard(String fileName){
- try {
- // 路徑根據實際項目修改
- String path = Environment.getExternalStorageDirectory().toString() + "/test_xml/";
- Log.v("", "path : " + path);
- File xmlFlie = new File(path+fileName);
- InputStream inputStream = new FileInputStream(xmlFlie);
- return inputStream;
- } catch (IOException e) {
- e.printStackTrace();
- }
- return null;
- }
b.多線程解析:
- /**
- * 多線程加載網絡端的xml,若xml文件過大也需要用該方式加載
- */
- Handler mHandler = new Handler();
- Runnable mRunnable = new Runnable() {
- public void run() {
- if(!isFinishParser){
- mHandler.postDelayed(mRunnable, 1000);
- }else{
- showView.setText(provinceStr);
- mHandler.removeCallbacks(mRunnable);
- }
- }
- };
- /**
- * 比較耗時操作新建一個線程,避免UI線程ANR
- */
- public void parserWhitThread(){
- new Thread(){
- @Override
- public void run() {
- provinceandcityStr = getStringByUrl(provinceAndCityUrl);
- provinceArray = ProvincePullParse.Parse(provinceandcityStr);
- for(Province pro : provinceArray){
- provinceStr += pro.getProvinceId() + " : " +pro.getProvinceName()+"\n";
- }
- isFinishParser = true;
- }
- }.start();
- }
- public static ArrayList<City> ParseXml(XmlPullParser parser){
- ArrayList<City> CityArray = new ArrayList<City>();
- City CityTemp = null;
- int provinceId = 0;
- int cityId;
- String cityName;
- try {
- //開始解析事件
- int eventType = parser.getEventType();
- //處理事件,不碰到文檔結束就一直處理
- while (eventType != XmlPullParser.END_DOCUMENT) {
- //因爲定義了一堆靜態常量,所以這裏可以用switch
- switch (eventType) {
- case XmlPullParser.START_DOCUMENT:
- break;
- case XmlPullParser.START_TAG:
- //給當前標籤起個名字
- String tagName = parser.getName();
- // Log.d("", "====XmlPullParser.START_TAG=== tagName: " + tagName);
- if(tagName.equals("province")){
- provinceId = Integer.parseInt(parser.getAttributeValue(0));
- }else if(tagName.equals("item")){
- CityTemp = new City();
- }else if(tagName.equals("id")){
- cityId = Integer.parseInt(parser.nextText());
- parser.next();
- cityName = parser.nextText();
- Log.v("", "id getText: "+cityId);
- Log.v("", "name getText: "+cityName);
- Log.e("", "=========================");
- CityTemp.setProvinceId(provinceId);
- CityTemp.setCityId(cityId);
- CityTemp.setCityName(cityName);
- CityArray.add(CityTemp);
- }
- break;
- case XmlPullParser.END_TAG:
- break;
- case XmlPullParser.END_DOCUMENT:
- break;
- }
- //別忘了用next方法處理下一個事件,忘了的結果就成死循環#_#
- eventType = parser.next();
- }
- } catch (XmlPullParserException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return CityArray;
- }
3.Android APIs:http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
來自:http://blog.csdn.net/zzp16/article/details/7795410