Swift의 웹 서비스에서 NSXMLParser를 사용하여 SOAP 응답 구문 분석

데이비 브라운

공개적으로 사용 가능한 웹 서비스에 SOAP 메시지를 신속하게 전달하고 있습니다. SOAP 응답을 받고 있으며 NSXMLParser를 사용하여 이것을 구문 분석하려고 시도하고 있음을 알 수 있습니다.

foundCharacters 매개 변수 가있는 파서 메서드를 사용 하려고 했지만 한 번만 호출되고 "Error"문자열 만 포함됩니다.

CelsiusToFahrenheitResult 태그에 포함되어야한다고 생각하는 결과에 액세스하고 싶습니다.

내가 호출하는 웹 서비스와 SOAP 메시지는 여기 에서 찾을 수 있습니다.

응답에 다음 요소가 포함되어 있음을 알 수 있습니다.

  • soap : 봉투
  • soap : 바디
  • CelsiusToFahrenheitResponse
  • CelsiusToFahrenheitResult

그런데 왜 여기에있는 값이 인쇄되지 않습니까?

비슷한 질문은 여기에서 찾을 수 있습니다 : Swift와 함께 NSXMLParser를 사용하여 SOAP 응답을 구문 분석 하지만 완전한 대답이 없습니다.

버튼을 누를 때 웹 서비스를 호출하는 내 뷰 컨트롤러의 전체 코드 :

import UIKit

class ViewController: UIViewController, UITextFieldDelegate, NSURLConnectionDelegate, NSXMLParserDelegate {
var mutableData:NSMutableData  = NSMutableData.alloc()

    @IBOutlet weak var button: UIButton!
    @IBOutlet weak var textfield: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    // These counts are just for my own reference - checking these later.
    var didStartElement = 0
    var didEndElement = 0
    var foundCharacters = 0

  func callWebService(){

    // This would likely be taken from an input.
    var celcius = "10";


    var soapMessage = "<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><CelsiusToFahrenheit xmlns='http://www.w3schools.com/webservices/tempconvert.asmx'><Celsius>\(celcius)</Celsius></CelsiusToFahrenheit></soap:Body></soap:Envelope>"

    println(soapMessage);
    var urlString =  "http://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheit"
    var url = NSURL(string: urlString)
    var theRequest = NSMutableURLRequest(URL: url!)
    var msgLength = String(count(soapMessage))

    theRequest.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
    theRequest.addValue(msgLength, forHTTPHeaderField: "Content-Length")
    theRequest.addValue("http://www.w3schools.com/webservices/CelsiusToFahrenheit", forHTTPHeaderField: "SOAPAction")
    theRequest.HTTPMethod = "POST"
    theRequest.HTTPBody = soapMessage.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

    var connection = NSURLConnection(request: theRequest, delegate: self, startImmediately: true)
    // Do NOT call start since the above call will start the connection


    }

    @IBAction func convertButtonClicked(sender: AnyObject) {

        callWebService();
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {

        println(response);

        if let httpResponse = response as? NSHTTPURLResponse {

            // Just printing the status code here.
            println("error \(httpResponse.statusCode)")


        }

        // We got a response to set the length of the data to zero since we will be adding to this
        // if we actually got any data back.
        mutableData.length = 0;
    }

    func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
        mutableData.appendData(data)
    }

    // Parse the result right after loading
    func connectionDidFinishLoading(connection: NSURLConnection!) {
        println(mutableData)

        var xmlParser = NSXMLParser(data: mutableData)
        xmlParser.delegate = self
        xmlParser.shouldProcessNamespaces = false
        xmlParser.shouldReportNamespacePrefixes = false
        xmlParser.shouldResolveExternalEntities = false
        xmlParser.parse()
    }


    func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {
        didStartElement += 1

        // Can see elements in the soap response being printed.
        println(elementName);
    }

    func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
        didEndElement += 1
    }

    func parser(parser: NSXMLParser, foundCharacters string: String?) {
        foundCharacters += 1
        // This prints "Error"
        println("found chars: \(string!)");

    }
}
블라디미르 코프만

문제는 NSXMLParser. 요청 SOAP 메시지에 문제가 있습니다. 올바른 네임 스페이스를 사용하는지 확인하십시오.

였다:

<CelsiusToFahrenheit xmlns='http://www.w3schools.com/webservices/tempconvert.asmx'>

결정된:

<CelsiusToFahrenheit xmlns="http://www.w3schools.com/webservices/"> 

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Swift / NSXMLParser를 사용하여 웹 블로그에서 올바른 요소를 구문 분석하는 방법

분류에서Dev

Blackberry의 SOAP 응답에서 객체를 구문 분석하는 방법

분류에서Dev

PHP에서 HTTP 웹 서비스 (JSON)의 응답 구문 분석

분류에서Dev

json_decode ()를 사용하여 JSON 웹 서비스 응답을 구문 분석 할 수 없습니다.

분류에서Dev

Java 웹 서비스의 C # 구문 분석 응답

분류에서Dev

트리거에서 Google 사용자 지정 검색 웹 서비스를 호출하고 응답을 구문 분석하여 내 sObject에 저장하는 방법

분류에서Dev

비누 UI | SOAP 봉투가없는 Soap UI에서 XML (응답) 노드를 구문 분석하는 방법

분류에서Dev

Java에서 SOAP 응답 구문 분석

분류에서Dev

Google Apps 스크립트를 사용하여 SOAP XML 응답을 구문 분석 할 수 없습니다.

분류에서Dev

SOAP 응답의 구문 분석을 수행하는 방법

분류에서Dev

TwitterKit을 사용하여 Swift에서 Twitter API 검색 응답 구문 분석

분류에서Dev

node.js로 SOAP 서비스를 사용하는 동안 응답 오류를 구문 분석 할 수 없습니다.

분류에서Dev

Java에서 Regex를 사용하여 HTTP XML 응답 구문 분석

분류에서Dev

SOAP 응답을 구문 분석하고 JAVA를 사용하여 특정 노드 추출

분류에서Dev

Amazon Lambda의 응답에서 데이터를 구문 분석하는 방법 [ 'Body']

분류에서Dev

PHP에서 SOAP API 응답으로 얻은 XML 응답에서 값을 구문 분석하는 방법

분류에서Dev

PHP에서 SOAP API 응답으로 얻은 XML 응답에서 값을 구문 분석하는 방법

분류에서Dev

NSXMLParser를 사용하여 특정 태그 내에서만 요소 구문 분석

분류에서Dev

NSXMLParser를 사용하여 노드 내부에서 html로 xml 구문 분석

분류에서Dev

Android에서 SOAP 응답 (문자열) 구문 분석

분류에서Dev

서버에서 SOAP 응답 구문 분석

분류에서Dev

순서를 계속 변경하는 JSON 응답의 값 구문 분석

분류에서Dev

Python에서 SOAP / XML 응답 구문 분석

분류에서Dev

C #에서 SOAP 웹 서비스를 어떻게 구문 분석 할 수 있습니까?

분류에서Dev

개조를 사용하여 XML 응답 구문 분석

분류에서Dev

Android의 응답에서 호스팅 된 결제 페이지를 구문 분석하는 방법

분류에서Dev

Xpath를 사용하여 웹 사이트에서 html 구문 분석

분류에서Dev

웹 요청 응답에서 json 구문 분석

분류에서Dev

Java Object에 대한 SOAP XML 응답 구문 분석

Related 관련 기사

  1. 1

    Swift / NSXMLParser를 사용하여 웹 블로그에서 올바른 요소를 구문 분석하는 방법

  2. 2

    Blackberry의 SOAP 응답에서 객체를 구문 분석하는 방법

  3. 3

    PHP에서 HTTP 웹 서비스 (JSON)의 응답 구문 분석

  4. 4

    json_decode ()를 사용하여 JSON 웹 서비스 응답을 구문 분석 할 수 없습니다.

  5. 5

    Java 웹 서비스의 C # 구문 분석 응답

  6. 6

    트리거에서 Google 사용자 지정 검색 웹 서비스를 호출하고 응답을 구문 분석하여 내 sObject에 저장하는 방법

  7. 7

    비누 UI | SOAP 봉투가없는 Soap UI에서 XML (응답) 노드를 구문 분석하는 방법

  8. 8

    Java에서 SOAP 응답 구문 분석

  9. 9

    Google Apps 스크립트를 사용하여 SOAP XML 응답을 구문 분석 할 수 없습니다.

  10. 10

    SOAP 응답의 구문 분석을 수행하는 방법

  11. 11

    TwitterKit을 사용하여 Swift에서 Twitter API 검색 응답 구문 분석

  12. 12

    node.js로 SOAP 서비스를 사용하는 동안 응답 오류를 구문 분석 할 수 없습니다.

  13. 13

    Java에서 Regex를 사용하여 HTTP XML 응답 구문 분석

  14. 14

    SOAP 응답을 구문 분석하고 JAVA를 사용하여 특정 노드 추출

  15. 15

    Amazon Lambda의 응답에서 데이터를 구문 분석하는 방법 [ 'Body']

  16. 16

    PHP에서 SOAP API 응답으로 얻은 XML 응답에서 값을 구문 분석하는 방법

  17. 17

    PHP에서 SOAP API 응답으로 얻은 XML 응답에서 값을 구문 분석하는 방법

  18. 18

    NSXMLParser를 사용하여 특정 태그 내에서만 요소 구문 분석

  19. 19

    NSXMLParser를 사용하여 노드 내부에서 html로 xml 구문 분석

  20. 20

    Android에서 SOAP 응답 (문자열) 구문 분석

  21. 21

    서버에서 SOAP 응답 구문 분석

  22. 22

    순서를 계속 변경하는 JSON 응답의 값 구문 분석

  23. 23

    Python에서 SOAP / XML 응답 구문 분석

  24. 24

    C #에서 SOAP 웹 서비스를 어떻게 구문 분석 할 수 있습니까?

  25. 25

    개조를 사용하여 XML 응답 구문 분석

  26. 26

    Android의 응답에서 호스팅 된 결제 페이지를 구문 분석하는 방법

  27. 27

    Xpath를 사용하여 웹 사이트에서 html 구문 분석

  28. 28

    웹 요청 응답에서 json 구문 분석

  29. 29

    Java Object에 대한 SOAP XML 응답 구문 분석

뜨겁다태그

보관