2016-09-19 10 views
8

मेरे पास आधार कार्ड की बार या क्यूआर कोड स्कैनिंग है। मुझे निम्नलिखित XML प्रारूप के रूप में प्रतिक्रिया मिल रही है। इसे xml पार्सिंग का उपयोग करके शब्दकोश प्रारूप में कैसे परिवर्तित करें?आईओएस स्विफ्ट में xml पार्सिंग

<?xml version="1.0" encoding="UTF-8"?><PrintLetterBarcodeData uid="685860050795" name="Sangeetha D" gender="F" yob="1989" co="W/O: Dhanansekaran" house="632" street="saradhambal nagar" lm="agaramel" vtc="Nazarathpettai" po="Nazarethpettai" dist="Tiruvallur" subdist="Poonamallee" state="Tamil Nadu" pc="600123" dob="03/06/1989"/> 

मैं

public func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 
    currentElement=elementName; 

    print(currentElement) 


} 

public func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { 
    currentElement=""; 

} 

public func parser(parser: NSXMLParser, foundCharacters string: String) { 

} 

को पार्स लेकिन इसकी हमेशा लौटने के रूप में "PrintLetterBarcodeData" currentElement के लिए निम्न कोड की कोशिश की

+0

@Wain मैं अपने प्रश्न – Madhumitha

+0

संपादित मुझे नहीं लगता कि आप लिखने के लिए है इसे संभालने के लिए अपने स्वयं के तरीके क्योंकि आप अपने इच्छित डेटा के साथ काम करना चाहते हैं। यदि आप तृतीय पक्ष पुस्तकालयों का उपयोग करने के ठीक हैं तो आप [यहां] (https://github.com/vsouza/awesome-ios#xml--html) सूचीबद्ध पुस्तकालयों में से एक का उपयोग कर सकते हैं। – Ayazmon

+0

आपके एक्सएमएल में केवल एक स्तर है। यह आम है। लेकिन आपको 'विशेषता डिक्ट' में रुचि हो सकती है। – Larme

उत्तर

5

यहाँ कुछ पार्स कोड मैं एक Google News RSS reader मैं पहले स्विफ्ट 2.0 में लिखा है के आधार पर स्विफ्ट 3 में लिखा है। मैं इस कोड एक भी एक के रूप में रूप में अच्छी तरह PrintLetterBarcodeData तत्वों की सूची को संभालने के लिए संशोधित किया है:

class BarcodeData { 
    var uid: String 
    var name: String 
    var gender: String 
    var yob: String 
    var co: String 
    var house: String 
    var street: String 
    var lm: String 
    var vtc: String 
    var po: String 
    var dist: String 
    var subdist: String 
    var state: String 
    var pc: String 
    var dob: String 

    init?(dictionary: [String : String]) { 
     guard let uid = dictionary["uid"], 
      let name = dictionary["name"], 
      let gender = dictionary["gender"], 
      let yob = dictionary["yob"], 
      let co = dictionary["co"], 
      let house = dictionary["house"], 
      let street = dictionary["street"], 
      let lm = dictionary["lm"], 
      let vtc = dictionary["vtc"], 
      let po = dictionary["po"], 
      let dist = dictionary["dist"], 
      let subdist = dictionary["subdist"], 
      let state = dictionary["state"], 
      let pc = dictionary["pc"], 
      let dob = dictionary["dob"] else { 
      return nil 
     } 

     self.uid = uid 
     self.name = name 
     self.gender = gender 
     self.yob = yob 
     self.co = co 
     self.house = house 
     self.street = street 
     self.lm = lm 
     self.vtc = vtc 
     self.po = po 
     self.dist = dist 
     self.subdist = subdist 
     self.state = state 
     self.pc = pc 
     self.dob = dob 

    } 
} 

class MyParser: NSObject { 
    var parser: XMLParser 

    var barcodes = [BarcodeData]() 

    init(xml: String) { 
     parser = XMLParser(data: xml.data(using: String.Encoding.utf8)!) 
     super.init() 
     parser.delegate = self 
    } 

    func parseXML() -> [BarcodeData] { 
     parser.parse() 
     return barcodes 
    } 

} 

extension MyParser: XMLParserDelegate { 

    func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 

     if elementName == "PrintLetterBarcodeData" { 

      if let barcode = BarcodeData(dictionary: attributeDict) { 
       barcodes.append(barcode) 
      } 
     } 
    } 
} 

उपयोग:

let xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><PrintLetterBarcodeData uid=\"685860050795\" name=\"Sangeetha D\" gender=\"F\" yob=\"1989\" co=\"W/O: Dhanansekaran\" house=\"632\" street=\"saradhambal nagar\" lm=\"agaramel\" vtc=\"Nazarathpettai\" po=\"Nazarethpettai\" dist=\"Tiruvallur\" subdist=\"Poonamallee\" state=\"Tamil Nadu\" pc=\"600123\" dob=\"03/06/1989\"/>" 

let parser = MyParser(xml: xmlString) 
let barcodes = parser.parseXML() // array of barcodes 
barcodes.first // your barcode 
+0

यह अच्छा है कि आपने आधार डेटा को पार्स करने का एक तरीका प्रदान किया है .. लेकिन आपको पता होना चाहिए कि आधार डेटा उपयोगकर्ता की निजी जानकारी है। तो कृपया सार्वजनिक वेबसाइटों पर उपयोगकर्ता के निजी डेटा को न पेश करना सुनिश्चित करें। धन्यवाद – Relsell

1

ऐसा लगता है कि आपकी उम्मीद XML संरचना केवल मूल तत्व PrintLetterBarcodeData के होते हैं और इसके गुण।

didStartElement प्रतिनिधि विधि में आपको attributeDict संपत्ति में आपके मूल तत्व के गुण मिलेंगे।

उदाहरण के लिए, name संपत्ति को निकालने के लिए, आप क्या करेंगे:

public func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 
    currentElement=elementName; 
    print(currentElement) 
    //print name 
    if let name = attributeDict["name"] { 
     print(name) //prints Sangeetha D 
    } 
} 
संबंधित मुद्दे