【iOS】XMLを解析する(swift3)
XMLを解析するには 「XMLParse」を使います。
このクラスのデリゲートメソッドによって
- XML解析の開始/終了
- 開始/終了タグと中のデータ
などを確認することができます。
詳しくはリファレンスを参照ください。
XMLParserDelegate - Foundation | Apple Developer Documentation
以下サンプルです。
import UIKit class ViewController: UIViewController, XMLParserDelegate { override func viewDidLoad() { super.viewDidLoad() // XML解析実行 loadxml() } // XMLを解析する func loadxml(){ // 解析するXMLのURL let urlString = "https://news.yahoo.co.jp/pickup/entertainment/rss.xml" guard let url = NSURL(string: urlString) else{ return } // インターネット上のXMLを取得し、NSXMLParserに読み込む guard let parser = XMLParser(contentsOf: url as URL) else{ return } parser.delegate = self; parser.parse() } // XML解析開始時に実行されるメソッド func parserDidStartDocument(_ parser: XMLParser) { print("XML解析開始しました") } // 解析中に要素の開始タグがあったときに実行されるメソッド func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { print("開始タグ:" + elementName) } // 開始タグと終了タグでくくられたデータがあったときに実行されるメソッド func parser(_ parser: XMLParser, foundCharacters string: String) { print("要素:" + string) } // 解析中に要素の終了タグがあったときに実行されるメソッド func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { print("終了タグ:" + elementName) } // XML解析終了時に実行されるメソッド func parserDidEndDocument(_ parser: XMLParser) { print("XML解析終了しました") } // 解析中にエラーが発生した時に実行されるメソッド func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) { print("エラー:" + parseError.localizedDescription) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
2行目:XMLParserDelegateの定義
デリゲートを継承します。
12〜26行目:XMLParserの実行処理
対象のXMLを指定、実行します。
HTTPSではないサイトの場合はアクセスできないのでATSを設定する必要があります。(下参照)
28〜56行目:XMLParserの解析処理
開始/終了、データの中身を確認します。
サンプルURLはヤフーさんのエンタメ記事です。
実行結果
XML解析開始しました 開始タグ:rss 要素: 開始タグ:channel 要素: 開始タグ:title 要素:Yahoo! 要素:ニュース・トピックス - エンタメ 終了タグ:title 要素: 開始タグ:link 要素:https://news.yahoo.co.jp/hl?c=c_ent 終了タグ:link 要素: 開始タグ:description 要素:Yahoo! JAPAN 要素:のニュース・トピックスで取り上げている最新の見出しを提供しています。 終了タグ:description 要素: 開始タグ:language 要素:ja 終了タグ:language 要素: 開始タグ:pubDate 要素:Tue, 09 Jan 2018 01:06:36 +0900 終了タグ:pubDate 要素: 開始タグ:item 要素: 開始タグ:title 要素:矢口 再婚「準備はしてます」 終了タグ:title 要素: 開始タグ:link 要素:https://news.yahoo.co.jp/pickup/6267590 終了タグ:link 要素: 開始タグ:pubDate 要素:Mon, 08 Jan 2018 15:00:59 +0900 終了タグ:pubDate 要素: 開始タグ:enclosure 要素: 終了タグ:enclosure 要素: 開始タグ:guid 要素:yahoo/news/topics/6267590 終了タグ:guid 要素: 終了タグ:item 要素: ~~~ 略 ~~~ 終了タグ:channel 要素: 終了タグ:rss XML解析終了しました
HTTPSではないサイトの場合はATSを設定する必要があるので注意してください。
info.plistに記述する方法▼
qiita.com
ATSを無効にする方法▼
qiita.com
参考サイト
【iOS Swift入門 #271】NSXMLParserを使ってXMLを解析する - Swift,Objective-Cプログラミング ~ iOS ~