2015-10-31 11 views
5
私は、このWebサービスの例にリクエストをしたい

を送ります。私はどのように私がalamofireでそれを行うことができますかわからない。そして、どのように私はxmlの結果を解析する応答を取得します。スウィフト2.0 SOAP要求は、XMLパラメータ

これは私が郵便配達で行った方法ですが、私はどのように迅速に同じことをしたいのですか。 enter image description here

ありがとうございました。

+0

https://github.com/cezheng/Fuziなどのパーサーでは、XPathやCSSセレクタを使用してXMLを解析しやすくなります。独自のシリアライザを定義することができます。 https://github.com/tristanhimmelman/AlamofireObjectMapperを見てください。これは、独自のAlamofire応答シリアライザを作成する良い例です。 – cezheng

答えて

0

私はgithubのからこれを得た:

Alamofireは、任意のSOAPやXMLのサポートが組み込まれていないので、あなた自身を書くこと を持っていると思います。幸いにも、カスタムの 応答シリアライザを作成するのは簡単ですが、XML解析はあなた次第です。

パラメータについては、ドキュメントを参照して、組み込みエンコーディングの がどちらのユースケースに一致するかを確認してください。

-3

SOAPEngine.をご覧ください。スイフトをサポートしており、よく維持されているようです。

+0

これに関する助けがありますか? :http://stackoverflow.com/questions/34867328/how-to-work-with-soap-web-service-and-xml-parsing-in-swift –

+3

無料のSDKではありません –

2

POSTリクエスト

  • URLを行います= http://holidaywebservice.com/HolidayService_v2/HolidayService2.asmx?wsdl
  • パラメータを符号化部
  • エンコーディングに送信され
    • それを試してみてください。mutbleRequest
    • を作成しました.Custom =>
    • a。あなたは直接URLまたはbを取ることができます。新しいURL
    • 重要なのは、SOAPメッセージのヘッダがある場合缶において、ウェブサービス、APIに従ってから変化することができる必要な値(String型)
    • て配置されることがあり、mutableRequest.HTTBodyありますログイン/パスワード/トークンまたは唯一の許可がある

    • 行 - "Content-Type":または "Content-Length"は状況によって異なります。

    • SWXMLHash.parse(response.data!)応答を処理することで、あなたは[AlamoFire /使用/レスポンスの処理]でより多くを見ることができます(https://github.com/Alamofire/Alamofire

      Alamofire.request(.POST, "http://holidaywebservice.com/HolidayService_v2/HolidayService2.asmx?wsdl", 
      parameters: nil, 
      encoding: .Custom({ 
          (convertible, params) in 
           //a. 
           let mutableRequest = convertible.URLRequest.copy() as!    NSMutableURLRequest 
           // or 
           //b. 
           mutableRequest.URL =NSURL(string: theUrlString) 
           let mutableReques02 = NSMutableURLRequest(URL: theURL!) 
           // 
           //mutableReques02.HTTPBody =.... 
      
           mutableRequest.HTTPBody =  
            "<?xml version=\"1.0\" encoding=\"UTF-8\"?> 
            <SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns1=\"urn:sap-com:document:sap:rfc:functions\"><SOAP-ENV:Body> 
             <hs:GetHolidaysAvaible> 
             <hs:countrycode> UnitedStates</hs:countrycode> 
             </hs:GetHolidaysAvaible> 
            </SOAP-ENV:Body></SOAP-ENV:Envelope>".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) 
      
          return (mutableRequest, nil)}), 
      headers: 
          ["Username": "login", // Login API 
          "Password": "password" , // Password API 
          "AuthenticatedToken" : "35432", // Authenticated API 
          "Authorization": "Basic nasiouynvo8eyt829409", // Authenticated API 
          "Accept" :  "text/xml", 
          "Content-Type" : "text/xml; charset=UTF-8", // Type content and charset accept 
          "Accept-Charset" : "UTF-8",]) 
      .responsePropertyList { response in 
           let xml = SWXMLHash.parse(response.data!) 
             print(xml) 
      } 
      

    :私の英語はあまり良くありません

  • +0

    答えにあなたのコードの説明 –

    +0

    今すぐ確認、私は説明しよう –

    2

    私はXMLMapperと呼ばれるXMLをオブジェクトにマッピングするポッドを書きました。 ObjectMapperと同じテクニックを使用します。

    Requests subspecを使用すると、簡単にSOAP要求を作成できます。

    まず、独自のカスタムSOAPMessage作成:Finaly Alamofireを使用してSOAPリクエストを送信

    let soapMessage = HolidayServiceMessage(soapAction: "GetHolidaysAvaible", nameSpace: "http://holidaywebservice.com/HolidayService_v2") 
    soapMessage.countryCode = "UnitedStates" 
    
    let soapEnvelope = SOAPEnvelope(soapMessage: soapMessage) 
    

    :その後のようなのSOAPEnvelopeを作成

    class HolidayServiceMessage: SOAPMessage { 
    
        var countryCode: String? 
    
        override func mapping(map: XMLMap) { 
         super.mapping(map: map) 
    
         countryCode <- map["m:countrycode"] 
        } 
    } 
    

    Alamofire.request("http://holidaywebservice.com/HolidayService_v2/HolidayService2.asmx?wsdl", method: .post, parameters: soapEnvelope.toXML(), encoding: XMLEncoding.soap(withAction: "http://holidaywebservice.com/HolidayService_v2#GetHolidaysAvaible")) 
    

    あなたがマップすることができますXMLMappableプロトコルを使用してオブジェクトを迅速に返すXML応答。