2017-04-27 208 views
0

我沒有找到關於如何在swift 3上發送SOAP請求的任何信息。我​​有一個SOAP API和XML。我使用Alamofire作爲我的項目的網絡客戶端。我的問題是如何在Swift上使用XML來請求SOAP,最好是使用Alamofire庫。帶有XML響應和body swift的SOAP請求3,Alamofire

+1

試試這個:http://blastar.biz/2016/08/09/swift-how-to-consume-soap-using-alamofire/ – KKRocks

+0

Ty,man;)這可能是正確的答案。 – couldDog

+0

高興地幫助你:) – KKRocks

回答

0

我用以下庫

pod 'Alamofire' 
    pod 'SWXMLHash' 
    pod 'AEXML' 
    pod 'StringExtensionHTML' 

然後,你需要導入

import SWXMLHash 
import StringExtensionHTML 
import AEXML 
import Alamofire 

此功能爲我的作品

func getLines(){ 

     let soapRequest = AEXMLDocument() 

     let envelopeAttributes = ["xmlns:soap":"http://schemas.xmlsoap.org/soap/envelope/", "xmlns:i" :"http://www.w3.org/2001/XMLSchema-instance","xmlns:d" : "http://www.w3.org/2001/XMLSchema","xmlns:c":"http://schemas.xmlsoap.org/soap/encoding/","xmlns:v":"http://schemas.xmlsoap.org/soap/envelope/"] 

     let act : AEXMLElement = AEXMLElement(name: "n0:getAllStations", value: "", attributes: ["id":"o0","c:root":"1", "xmlns:n0":"http://ws.wso2.org/dataservice"]) 
     let child1 : AEXMLElement = AEXMLElement(name: "lang", value: "en", attributes: ["i:type":"d:string"]) 

     act.addChild(child1) 

     let envelope = soapRequest.addChild(name: "soap:Envelope", attributes: envelopeAttributes) 
     envelope.addChild(name :"soap:Header") 
     let body = envelope.addChild(name: "soap:Body") 
     body.addChild(act) 

     let soapLenth = String(soapRequest.xml.characters.count) 
     let theURL = URL(string: "http://103.11.35.13:9080/services/RailwayWebServiceV2Proxy.RailwayWebServiceV2ProxyHttpSoap12Endpoint") 

     print(soapRequest.xml) 

     var mutableR = URLRequest(url: theURL!) 
     mutableR.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type") 
     mutableR.addValue(soapLenth, forHTTPHeaderField: "Content-Length") 
     mutableR.addValue("getAllStations", forHTTPHeaderField: "SOAPAction") 
     mutableR.httpMethod = "POST" 
     mutableR.httpBody = soapRequest.xml.data(using: String.Encoding.utf8) 

     Alamofire.request(mutableR) 
      .responseString { response in 
       if let xmlString = response.result.value { 

        let xml = SWXMLHash.parse(xmlString) 

        for element in xml["soapenv:Envelope"]["soapenv:Body"]["datas1:lines"]["datas1:line"].all { 

         if let nameElement = element["datas1:id"].element { 
          let line = Lines() 
          line.id = Int(nameElement.text) 
          self.lines.append(line) 
         } 

         if let nameElement = element["datas1:LineName"].element { 
          let line = Lines() 
          line.LineName = nameElement.text 
          self.lines.append(line) 
         } 

        } 

       }else{ 
        print("error fetching XML") 
       } 
     } 

    }