今天要來解析xml文件了,首先要先取得xml的文件,在opendata上可以找到很多xml資料。
下載完成後要來讀取文件,在這之前可以先開一個資料夾用來存放xml文件,在專案上點右鍵選擇New -> Folder -> Assets Folder。
接下來將下載下來的xml文件放到assets中。
之後便能夠開始使用XmlPullParser來解析xml文件了,首先要來讀取檔案。
fun getAssetsStream(){
try {
val tourData: InputStream = activity!!.assets.open("tour.xml")
} catch (e: Exception){
e.printStackTrace()
}
}
之後便能夠使用XmlPullParser來解析tourData。
fun getAssetsStream(){
try {
val tourData: InputStream = activity!!.assets.open("tour.xml")
val xmlPullParser = Xml.newPullParser()
//xml解析器
xmlPullParser.setInput(tourData, "utf-8")
} catch (e: Exception){
e.printStackTrace()
}
}
這邊先貼上我的xml結構
<ROOT>
<RECORD></RECORD>
<RECORD></RECORD>
<RECORD></RECORD>
<RECORD></RECORD>.....
</ROOT>
RECORD內容:
<ROOT>
<RECORD>
<景點ID></景點ID>
<狀態></狀態>
<名稱></名稱>
<簡述></簡述>
<介紹></介紹>
<鄉鎮市區></鄉鎮市區>
<地址></地址>
<東經></東經>
<北緯></北緯>
<電話></電話>
<大眾運輸></大眾運輸>
<門票資訊></門票資訊>
<行車資訊></行車資訊>
<停車資訊></停車資訊>
<旅遊叮嚀></旅遊叮嚀>
</RECORD>
</ROOT>
只要取得節點後變能夠將資料顯示出來,log的部分可以在下方的Logcat找到。
fun getAssetsStream(){
try {
val tourData: InputStream = activity!!.assets.open("tour.xml")
val xmlPullParser = Xml.newPullParser()
//xml解析器
xmlPullParser.setInput(tourData, "utf-8")
//取得xml節點
var eventType = xmlPullParser.eventType
//讀取xml資料
while (eventType != XmlPullParser.END_DOCUMENT) {
when (eventType) {
//xml找到的節點儲存到list
XmlPullParser.START_TAG -> if (xmlPullParser.name == "RECORD") {
//節點-名稱
} else if (xmlPullParser.name == "名稱") {
val name = xmlPullParser.nextText()
Log.e("tour", "name: $name")
//節點-區域
} else if (xmlPullParser.name == "鄉鎮市區") {
val area = xmlPullParser.nextText()
Log.e("tour", "area: $area")
//節點-地址
} else if (xmlPullParser.name == "地址") {
val addr = xmlPullParser.nextText()
Log.e("tour", "addr: $addr")
//節點-經度
} else if (xmlPullParser.name == "東經") {
val eastL = xmlPullParser.nextText()
Log.e("tour", "eastL: $eastL")
//節點-緯度
} else if (xmlPullParser.name == "北緯") {
val northL = xmlPullParser.nextText()
Log.e("tour", "northL: $northL")
}
//節點結束
XmlPullParser.END_TAG -> if (xmlPullParser.name == "RECORD") {
}
}
//下一個xml節點
eventType = xmlPullParser.next()
}
tourData.close()
} catch (e: Exception){
e.printStackTrace()
}
}
今天的部結束,明天要將資料顯示到sspinner上。