LoginSignup
0
1

More than 3 years have passed since last update.

[Swift5] XMLParserでXML解析

Last updated at Posted at 2021-04-24

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
    }
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1