Advertisement
ZTCYING

lab- XMLPeopleParser

May 4th, 2024
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 2.71 KB | None | 0 0
  1. //
  2. //  XMLPeopleParser.swift
  3. //  PersonInformation
  4. //
  5. //  Created by Isabel Maria Ronan on 23/02/2024.
  6. //
  7.  
  8. import Foundation
  9.  
  10. class XMLPeopleParser: NSObject, XMLParserDelegate {
  11.     var xmlName: String
  12.    
  13.     init(xmlName: String) {
  14.         self.xmlName = xmlName
  15.     }
  16.    
  17.     // parsed variable definitions
  18.     var name, email, phone, image, url: String!
  19.     let tags = ["name", "email", "phone", "image", "url"]
  20.    
  21.     // variables for spying
  22.     var elementId = -1
  23.     var passData = false
  24.    
  25.     var personData: Person!
  26.     var peopleData = [Person]()
  27.    
  28.     // parser object
  29.     var parser: XMLParser!
  30.    
  31.     // MARK: parsing methods
  32.     // didStartElement
  33.     func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
  34.         if tags.contains(elementName) {
  35.             // spying
  36.             passData = true
  37.             // check what tag to spy
  38.             switch elementName {
  39.                 case "name" : elementId = 0
  40.                 case "email" : elementId = 1
  41.                 case "phone" : elementId = 2
  42.                 case "image" : elementId = 3
  43.                 case "url" : elementId = 4
  44.                 default: break
  45.             }
  46.         }
  47.     }
  48.     // didEndElement
  49.     func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
  50.         // if an end tag is found ==> reset the spies
  51.         if tags.contains(elementName) {
  52.             passData = false
  53.             elementId = -1
  54.         }
  55.         if elementName == "person" {
  56.             personData = Person(name: name, email: email, phone: phone, image: image, url: url)
  57.             peopleData.append(personData)
  58.            
  59.         }
  60.     }
  61.     // found characters
  62.     func parser(_ parser: XMLParser, foundCharacters string: String) {
  63.         // if the tag is spying, store the data
  64.         if passData {
  65.             // populate the pVars
  66.             switch elementId {
  67.                 case 0: name = string
  68.                 case 1: email = string
  69.                 case 2: phone = string
  70.                 case 3: image = string
  71.                 case 4: url = string
  72.                 default: break
  73.             }
  74.         }
  75.     }
  76.     // begin actually parsing
  77.     func parsing() {
  78.         // get the file from the bundle
  79.         let bundle = Bundle.main.bundleURL
  80.         let bundleURL = NSURL(fileURLWithPath: self.xmlName, relativeTo: bundle)
  81.        
  82.         // make the parser, delegate it, and parse
  83.         parser = XMLParser(contentsOf: bundleURL as URL)
  84.         parser.delegate = self
  85.         parser.parse()
  86.     }
  87. }
  88.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement