Android中解析XML總結
阿新 • • 發佈:2019-02-14
前言:
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檔案都遍歷完
原始碼: