Как получить данные из XML в Swift - PullRequest
0 голосов
/ 09 мая 2019

Я хочу получить ответ сервиса от XML. Я попробовал 'SWXMLHash' 'SwiftyXMLParser'.

Мне нужно это значение: 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>

1 Ответ

0 голосов
/ 09 мая 2019

Если бы вы просто использовали XMLParser, вы бы определили объект делегата:

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)
    }
}

А потом разберешься:

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