Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // XMLPeopleParser.swift
- // PersonInformation
- //
- // Created by Isabel Maria Ronan on 23/02/2024.
- //
- import Foundation
- class XMLPeopleParser: NSObject, XMLParserDelegate {
- var xmlName: String
- init(xmlName: String) {
- self.xmlName = xmlName
- }
- // parsed variable definitions
- var name, email, phone, image, url: String!
- let tags = ["name", "email", "phone", "image", "url"]
- // variables for spying
- var elementId = -1
- var passData = false
- var personData: Person!
- var peopleData = [Person]()
- // parser object
- var parser: XMLParser!
- // MARK: parsing methods
- // didStartElement
- func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
- if tags.contains(elementName) {
- // spying
- passData = true
- // check what tag to spy
- switch elementName {
- case "name" : elementId = 0
- case "email" : elementId = 1
- case "phone" : elementId = 2
- case "image" : elementId = 3
- case "url" : elementId = 4
- default: break
- }
- }
- }
- // didEndElement
- func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
- // if an end tag is found ==> reset the spies
- if tags.contains(elementName) {
- passData = false
- elementId = -1
- }
- if elementName == "person" {
- personData = Person(name: name, email: email, phone: phone, image: image, url: url)
- peopleData.append(personData)
- }
- }
- // found characters
- func parser(_ parser: XMLParser, foundCharacters string: String) {
- // if the tag is spying, store the data
- if passData {
- // populate the pVars
- switch elementId {
- case 0: name = string
- case 1: email = string
- case 2: phone = string
- case 3: image = string
- case 4: url = string
- default: break
- }
- }
- }
- // begin actually parsing
- func parsing() {
- // get the file from the bundle
- let bundle = Bundle.main.bundleURL
- let bundleURL = NSURL(fileURLWithPath: self.xmlName, relativeTo: bundle)
- // make the parser, delegate it, and parse
- parser = XMLParser(contentsOf: bundleURL as URL)
- parser.delegate = self
- parser.parse()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement