七天學會 swift - 解析 XML Day6


解析 XML

IOS SDK 本身已經內建 XML 解析器 NSXMLParser 了,除非要解析的 XML 檔案太複雜,否則使用內建的解析器就可以完成許多工作。
首先,在這個範例中,我們先建立一個簡單的 XML 檔案,檔名為 test.xml,並將他加到專案中。檔案內容如下:

<student begin_year="2016" end_year="2020">
    <id>A01</id>
    <name>Eric</name>
    <tel>1234567</tel>
</student>

透過解析器的解析,我們能得到 2016、A01、Eric、1234567 這些內容

  • 步驟說明

    1. 建立 Single View App 專案 :
    2. 新增一個檔案,檔名取為 test.xml。產生後輸入下列內容

      <student begin_year="2016" end_year="2020">
           <id>A01</id>
           <name>Eric</name>
           <tel>1234567</tel>
      </student>
      
    3. 開啟 ViewController.swift,這個類別需要符合 XMLParserDelegate 協定的規範。並且宣告一個變數,目的是之後用來存放解析到的標籤名稱。

      Class ViewController: UIViewController, XMLParserDelegate {
          var tagName: String? = nil
      
    4. 在 ViewDidLoad() 中開啟 test.xml 檔並且啟動 Parser

      override func viewDidLoad() {
          super.viewDidLoad()
          let url = Bundle.main.url(forResource: "test", withExtension: "xml")
          if let xml = XMLParser(contentsOf: url!) {
              xml.delegate = self
              xml.parse()
          } 
      }
      
    5. 實作 parser(_:didStartElement:namespeceURI:qualifedName:attributes:),這個函數可以抓到 XML 標籤中的開始標籤。

      func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
          tagName = nil
      
          switch elementName {
          case "student" :
              /* 印出
              begin_year: 2016
              end_year: 2020
              */
      
              for key in attributeDict.keys {
                  let value = attributeDict[key]
                  print("\(key): \(value!)")
              }
      
          default:
              tagName = elementName
          }
      }
      
    6. 實作 parser(_:foundCharacters:) 函數,這個函數用來取得開始標籤與結束標籤間的內容

      func parser(_ parser: XMLParser, foundCharacters string: String) {
      guard tagName != nil else {
              return
          }
      
          /* 印出
          id: A01
          name: Eric
          tel: 1234567
          */
      
          print("\(tagName!): \(string)")
      }
      
    7. 實作 parser(_:didEndElement:namespaceURI:qualifiedName:)函數,這個函數用來取得結束標籤。

      func parser(_ parser: XMLParser, didEndElement elementName : String, namespaceURI: String?, qualifiedName qName: String?) {
          tagName = nil
      }
      
    8. 執行結果
      begin_year: 2016
      end_year: 2020
      id: A01
      name: Eric
      tel: 1234567

#swift #iOS
這個系列將會帶大家入門 swift,內容上會較簡單,適合剛學習寫程式的新手






Related Posts

建立映像檔使用Dockerfile

建立映像檔使用Dockerfile

Day02 為資料命名

Day02 為資料命名

每日心得筆記 2020-06-24(三)

每日心得筆記 2020-06-24(三)

React Elements

React Elements

Day04 慣用寫法 (idioms)

Day04 慣用寫法 (idioms)

實作簡單的REST API

實作簡單的REST API



Comments