1. 程式人生 > >Android中解析XML總結

Android中解析XML總結

前言:

1>示例XML檔案內容

對示例所演示的是如何解析一個XML檔案,對於我們要解析的XML檔案,其已經放入本應用的資料夾下了;

對於我們要解析的XML檔案,其內容如下:


2>認識XmlPullParser

I>解析器的當前事件狀態可以通過呼叫getEventType()方法來知道;

在最開始的時候,解析器是處於START_DOCUMENT的事件狀態之中的;

II>

next()方法將會讓解析器進入到下一個事件當中,然後其int型別的返回值表明了

解析器當前已處於哪個事件狀態之中;

III>

以下事件型別,可以通過next()方法得到:

START_TAG
表明此刻一個XML的開始標籤被讀取

TEXT
表明此刻一個文字內容被讀取,這個文字內容可以通過getText()方法獲取到;
END_TAG
一個結束標籤被讀取
END_DOCUMENT
表明XML檔案解析結束

程式碼示例如下:

MainActivity:

package com.example.administrator.testparsexml;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.util.Xml;
import android.view.View;
import org.xmlpull.v1.XmlPullParser; import java.io.File; import java.io.FileReader; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /***
* 現在在本應用的資料夾有一個XML檔案下, * 那麼下面,我們來對其進行解析操作; * **/ public void parseXML(View view){ XmlPullParser xmlPullParser = Xml.newPullParser(); try { /*** * 指明需要解析的XML檔案的位置 * **/ xmlPullParser.setInput(new FileReader(new File(getFilesDir(),"test.xml"))); /*** * 如果沒有解析到XML檔案的結尾,則繼續解析 * ***/ while (xmlPullParser.getEventType() != XmlPullParser.END_DOCUMENT){ if(xmlPullParser.getEventType() == XmlPullParser.START_DOCUMENT){ Log.e("parseXML","開始解析"); }else if(xmlPullParser.getEventType() == XmlPullParser.START_TAG){ Log.e("parseXML",xmlPullParser.getName()); }else if(xmlPullParser.getEventType() == XmlPullParser.TEXT){ Log.e("parseXML",xmlPullParser.getText()); }else if(xmlPullParser.getEventType() == XmlPullParser.END_TAG){ Log.e("parseXML",xmlPullParser.getName()); } /*** * 移到下一個解析事件 * **/ xmlPullParser.next(); } Log.e("parseXML","結束解析"); } catch (Exception e) { e.printStackTrace(); } } }

執行結果如下:

總結:

1>

由於本示例中用到了SD的讀操作,所以在AndroidManifest.xml中宣告一下讀許可權:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

2>

XML檔案的解析方式有很多種,在這裡採用Pull方式進行解析,在Pull方式解析的過程中:

xmlPullParser.getEventType()主要是用來獲取當前解析器處於哪個節點上;

xmlPullParser.getName()主要是用來獲取處在START_TAG或者END_TAG事件時的XML標籤名

xmlPullParser.getText()主要是用來獲取文字內容

xmlPullParser.next()主要是為了讓解析器移動到下一個事件上,這樣就可以把整個XML檔案都遍歷完

原始碼: