Khabbab_h
Khabbab_h

Reputation: 31

How to get data from xml in Swift

I want to get a service response from XML.I tried 'SWXMLHash' ,'SwiftyXMLParser'.

I need this value: Device is Registered

<?xml version="1.0" encoding="utf-8"?><soap:Envelope 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body> 
<QR_GetDeviceCheckAndRegistrationResponse 
xmlns="http://www.bdmitech.com/m2b"> 
<QR_GetDeviceCheckAndRegistrationResult>Device is 
Registered</QR_GetDeviceCheckAndRegistrationResult> 
</QR_GetDeviceCheckAndRegistrationResponse></soap:Body> 
</soap:Envelope>

Upvotes: 0

Views: 1772

Answers (1)

Rob
Rob

Reputation: 437432

If you were to just use XMLParser, you’d define a delegate object:

class ParserDelegate: NSObject, XMLParserDelegate {
    var currentValue: String?
    var registrationResult: String?

    func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
        if elementName == "QR_GetDeviceCheckAndRegistrationResult" {
            currentValue = ""
        }
    }

    func parser(_ parser: XMLParser, foundCharacters string: String) {
        currentValue? += string
    }

    func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
        if elementName == "QR_GetDeviceCheckAndRegistrationResult" {
            registrationResult = currentValue
            currentValue = nil
        }
    }

    func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) {
        print(parseError)
    }
}

And then you’d parse:

let parser = XMLParser(data: data)
let parserDelegate = ParserDelegate()
parser.delegate = parserDelegate
guard 
    parser.parse(),
    let result = parserDelegate.registrationResult
else { return }
print(result)

Upvotes: 1

Related Questions