2015-10-31 13 views
5

मैं इस वेब सेवा उदाहरण के लिए एक अनुरोध करना चाहता हूँ भेज देते हैं। मुझे नहीं पता कि मैं अलामोफायर के साथ ऐसा कैसे कर सकता हूं। और मैं xml परिणाम पार्स करने के लिए प्रतिक्रिया कैसे प्राप्त करता हूं।Alamofire साथ स्विफ्ट 2.0 साबुन अनुरोध एक्सएमएल मापदंडों

इस तरह मैंने डाकिया में किया, लेकिन मैं जानना चाहता हूं कि यह कैसे तेजी से करता है। enter image description here

आपकी सहायता के लिए धन्यवाद।

+0

पार्सर्स जैसे https://github.com/cezheng/Fuzi आपके लिए XPath या CSS चयनकर्ताओं के माध्यम से xml को पार्स करना आसान बना देगा। आप इसके लिए अपने स्वयं के धारावाहिक परिभाषित कर सकते हैं। Https://github.com/tristanhimmelman/AlamofireObjectMapper पर एक नज़र डालें, जो आपके स्वयं के अलामोफायर प्रतिक्रिया धारावाहिक बनाने का एक अच्छा उदाहरण है – cezheng

उत्तर

0

मैं GitHub से मिला:

Alamofire किसी भी साबुन या XML समर्थन में बनाया नहीं है, तो आप होगा अपने खुद के लिखने के लिए। सौभाग्य से यह एक कस्टम प्रतिक्रिया धारावाहिक बनाने के लिए सीधा है, लेकिन एक्सएमएल पार्सिंग आपके ऊपर है।

पैरामीटर के लिए, प्रलेखन पर एक नज़र डालें और देखें कि आपके उपयोग के मामले में निर्मित एन्कोडिंग के देखें।

-3

SOAPEngine. पर एक नज़र डालें यह स्विफ्ट का समर्थन करता है और अच्छी तरह से बनाए रखा प्रतीत होता है।

+0

इसके साथ कोई मदद? : http://stackoverflow.com/questions/34867328/how-to-work-with-soap-web-service-and-xml-parsing-in-swift –

+3

यह मुफ्त sdk –

2

प्रयास करें यह

  • एक पोस्ट अनुरोध
  • यूआरएल देगा = http://holidaywebservice.com/HolidayService_v2/HolidayService2.asmx?wsdl
  • पैरामीटर्स एन्कोडिंग अनुभाग
  • एन्कोडिंग के लिए भेजा जाता: .Custom =>
  • एक mutbleRequest
  • बनाया गया
  • ए। आप सीधे यूआरएल या बी ले सकते हैं। नया URL
  • महत्वपूर्ण, mutableRequest.HTTBody है यह वह जगह है जहाँ साबुन संदेश आवश्यक मूल्यों (प्रकार स्ट्रिंग)
  • हेडर वेब सेवा और एपीआई के अनुसार भिन्न हो सकता है के साथ रखा गया है, एक मामले में कर सकते हैं लॉगिन/पासवर्ड/टोकन या केवल प्राधिकरण

  • लाइन -> "सामग्री-प्रकार": या "सामग्री-लंबाई" स्थिति पर निर्भर करता है।

  • 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 नामक वस्तुओं को एक्सएमएल मैप करने के लिए एक पॉड लिखा था। (ObjectMapper के समान तकनीक का उपयोग करता है)

आप आसानी से SOAP अनुरोध बनाने के लिए Requests सबपेक का उपयोग कर सकते हैं।जैसे

class HolidayServiceMessage: SOAPMessage { 

    var countryCode: String? 

    override func mapping(map: XMLMap) { 
     super.mapping(map: map) 

     countryCode <- map["m:countrycode"] 
    } 
} 

फिर SOAPEnvelope बनाने:

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

आप मैप कर सकते हैं:

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

let soapEnvelope = SOAPEnvelope(soapMessage: soapMessage) 

अंत में सोप अनुरोध का उपयोग Alamofire भेज

सबसे पहले अपने स्वयं के कस्टम SOAPMessage बनाने XMLMappable प्रोटोकॉल का उपयोग कर त्वरित वस्तुओं के लिए एक्सएमएल प्रतिक्रिया।

संबंधित मुद्दे