首页 > 解决方案 > SOAP API 在可选括号中响应 XML。如何迎合它?

问题描述

我的代码片段是

class ViewController: UIViewController, XMLParserDelegate {
var is_SoapMessage: String = "<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=\"https://www.w3schools.com/xml/\"><Celsius>55</Celsius></CelsiusToFahrenheit></soap:Body></soap:Envelope>"
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    let is_URL: String = "https://www.w3schools.com/xml/tempconvert.asmx?op=CelsiusToFahrenheit"
    let lobj_Request = NSMutableURLRequest(url: NSURL(string: is_URL)! as URL)
    let session = URLSession.shared
    //let err: NSError?
    lobj_Request.httpMethod = "POST"
    lobj_Request.httpBody = is_SoapMessage.data(using: String.Encoding.utf8)
    lobj_Request.addValue("www.w3schools.com", forHTTPHeaderField: "Host")
    lobj_Request.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type")
    lobj_Request.addValue(String(is_SoapMessage.characters.count), forHTTPHeaderField: "Content-Length")
   lobj_Request.addValue("https://www.w3schools.com/xml/CelsiusToFahrenheit", forHTTPHeaderField: "SOAPAction")
    let task = session.dataTask(with: lobj_Request as URLRequest, completionHandler: {data, response, error -> Void in
       // print("Response: \(response)")
        let strData = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
        print(strData)
        if error != nil
        {
            print("Error: ", error!)
        }
        let xmlParser = XMLParser(data: data!)
        xmlParser.delegate = self
        //xmlParser.shouldProcessNamespaces = false
        //xmlParser.shouldReportNamespacePrefixes = false
        //xmlParser.shouldResolveExternalEntities = false
        let bool: Bool = xmlParser.parse()
        print(bool)
    })
    task.resume()
}
private func parser(parser: XMLParser, didStartElement: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {
    // Can see elements in the soap response being printed.
    print("Helloa");
}
func parserDidStartDocument(_ parser: XMLParser) {
    print("Started")
}
func parserDidEndDocument(_ parser: XMLParser) {
    print("Ended")
}
func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) {
    print("error")
}

所有解析器函数都被真正调用,但 didStartElement 从未被调用。我得到的响应在 Optional Tag 中,而 XML Parser 没有得到任何元素。有什么猜测吗?查看图像输出

标签: iosiphoneswiftsoapswift3

解决方案


更新到最新

func parser(_ parser: XMLParser, 
 didStartElement elementName: String, 
    namespaceURI: String?, 
   qualifiedName qName: String?, 
      attributes attributeDict: [String : String] = [:]) {}

推荐阅读