Hier ist der Code, in dem ich eine SOAP-Nachricht an meinen Web Service mit meinem Integrationsschlüssel, Benutzername und Passwort gesendet habe. Ich war in der Lage, die Antwort zu erhalten und den ganzen Weg hinunter zu foundCharacters zu analysieren.Handle XML geparste Antwort in Swift
Jetzt muss ich beide Elemente innerhalb der geparsten Antwort speichern, damit ich sie später für eine andere Anfrage verwenden kann.
Ich habe nach Tutorials überall gesucht, aber ich kann nicht ruhig diese Tutorials verstehen, weil die meisten von ihnen über XML-Dateien lokal speichern und nicht von einem echten WebService.
class LoginCentralViewController: UIViewController, XMLParserDelegate, NSURLConnectionDelegate {
var chaveWS = ChaveWebService().chave()
var mutableData:NSMutableData = NSMutableData()
var currentElement:NSString = ""
@IBAction func btnAcessarACTION(_ sender: Any) {
let soapMessage = "<soapenv:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:log='LoginCentral'><soapenv:Header/><soapenv:Body><log:LoginCentral soapenv:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'><Autenticacao xsi:type='urn:Autenticacao' xmlns:urn='urn:RouterBoxMobile'><ChaveIntegracao xsi:type='xsd:string'>\(chaveWS)</ChaveIntegracao></Autenticacao><DadosLoginCentral xsi:type='urn:DadosLoginCentral' xmlns:urn='urn:RouterBoxMobile'><Usuario xsi:type='xsd:string'>wagner</Usuario><Senha xsi:type='xsd:string'>mudar123</Senha></DadosLoginCentral></log:LoginCentral></soapenv:Body></soapenv:Envelope>"
let urlString = "https://example.com?wsdl"
let url = NSURL (string: urlString)
let theRequest = NSMutableURLRequest(url: url! as URL)
let msgLength = soapMessage.characters.count
theRequest.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
theRequest.addValue(String(msgLength), forHTTPHeaderField: "Content-Length")
theRequest.httpMethod = "POST"
theRequest.httpBody = soapMessage.data(using: String.Encoding.utf8, allowLossyConversion: false)
let connection = NSURLConnection(request: theRequest as URLRequest, delegate: self, startImmediately: true)
connection!.start()
if (connection != nil) {
var mutableData : Void = NSMutableData.initialize()
}
print("passou")
}
override func viewDidLoad() {
super.viewDidLoad()
}
func connection(_ connection: NSURLConnection!, didReceiveResponse response: URLResponse!) {
mutableData.length = 0;
print("passou aqui tbm")
}
func connection(_ connection: NSURLConnection!, didReceiveData data: NSData!) {
mutableData.append(data as Data)
}
func connectionDidFinishLoading(_ connection: NSURLConnection!) {
let response = NSString(data: mutableData as Data, encoding: String.Encoding.utf8.rawValue)
let xmlParser = XMLParser(data: mutableData as Data)
xmlParser.delegate = self
xmlParser.parse()
xmlParser.shouldResolveExternalEntities = true
//print(response)
}
//XMLParser
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
currentElement = elementName as NSString
//print(elementName)
}
func parser(_ parser: XMLParser, foundCharacters string: String) {
if currentElement == "LoginCentralResponse" {
print(currentElement, string)
}
print(currentElement, string)
}
}
Hier ist die geparsten Antwort, die ich speichern müssen und wiederzuverwenden:
ClientCode : 8
Permissions : 70,73,77,75,71,72
Ich habe eine Frage zu den Konstanten. public let verify_token = "VerifyToken" << Ich habe ein Sicherheitstoken, um die Verbindung zu autorisieren, aber es muss innerhalb der Soap-Nachricht gesendet werden, genau wie der Benutzername und das Passwort, oder verstehe ich es falsch? –
Nein, diese Variablen sind nur ein Beispiel für das Verständnis, einschließlich SOAP-Nachricht. –
Bei SOAP, gibt es SOAPAction, BASE_URL und WSDL_URL richtig? Deshalb lasse ich es als constants.Let mir untersuchen Sie kurz auf Antwort –