XMLParserの使い方メモ
・XMLParserDelegateを継承する
・メソッドの実装(didStartElement/foundCharacters/didEndElement)
class ViewController: UIViewController,XMLParserDelegate,UIViewControllerTransitioningDelegate {
var userName = String()
var profileImageUrl = URL(string: "")
@IBOutlet weak var meigenLabel: UILabel!
@IBOutlet weak var toFeedButton: UIButton!
@IBOutlet weak var profileImage: UIImageView!
var parser = XMLParser()
var feedItem = [FeedItem()]
var currentElementName:String!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
toFeedButton.layer.cornerRadius = toFeedButton.frame.width/8
self.navigationController?.isNavigationBarHidden = true
//XML解析
let url = "http://meigen.xxxxx.xxx/"
let urlToSend = URL(string: url)
parser = XMLParser(contentsOf: urlToSend!)!
parser.delegate = self
parser.parse()
}
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
currentElementName = nil
if elementName == "data"{
self.feedItem.append(FeedItem())
}else{
currentElementName = elementName
}
}
func parser(_ parser: XMLParser, foundCharacters string: String) {
if self.feedItem.count > 0{
//meigenとautherを処理していく
let lastItem = self.feedItem[self.feedItem.count - 1]
switch self.currentElementName {
case "meigen":
lastItem.meigen = string
case "auther":
lastItem.auther = string
meigenLabel.text = lastItem.meigen + "\n" + lastItem.auther
default:
break
}
}
}
func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
currentElementName = nil
}
}