iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 9
0
自我挑戰組

Android的學習歷程系列 第 9

[Day 9] Android-使用XmlPullParser取得xml資料

今天要來解析xml文件了,首先要先取得xml的文件,在opendata上可以找到很多xml資料。

下載完成後要來讀取文件,在這之前可以先開一個資料夾用來存放xml文件,在專案上點右鍵選擇New -> Folder -> Assets Folder。
https://ithelp.ithome.com.tw/upload/images/20190925/20121080k8JakH7F8p.png
https://ithelp.ithome.com.tw/upload/images/20190925/20121080Bbw0YSot3G.png

接下來將下載下來的xml文件放到assets中。
https://ithelp.ithome.com.tw/upload/images/20190925/20121080pVDx795aB8.png

之後便能夠開始使用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()
          }
    }

https://ithelp.ithome.com.tw/upload/images/20190925/20121080JjOX2zmtfW.png

今天的部結束,明天要將資料顯示到sspinner上。


上一篇
[Day 8] 簡單說明xml文件
下一篇
[Day 10] Android程式設計-使用OpenData資料製作app(六)(kotlin)
系列文
Android的學習歷程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言