ios - 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 没有得到任何元素。有什么猜测吗?查看图像输出
解决方案
更新到最新
func parser(_ parser: XMLParser,
didStartElement elementName: String,
namespaceURI: String?,
qualifiedName qName: String?,
attributes attributeDict: [String : String] = [:]) {}
推荐阅读
- python - 无法使用 Windows PowerShell 安装 Jupyter Notebook,因为 pip 不会升级到版本 20.1
- c - 试图编写一个简单的程序来扫描输入并保存它或完全程序但我在这里碰壁
- angular - *ngIf 有时仅适用于异步管道
- html - Context.drawImage 在 image.onload 之后不起作用
- testing - 在移动设备上使用 testCafe 播放视频
- swift - SwiftUi - 如何在 SwiftUi 中将字符串值连接到整数
- javascript - 在现有网页中添加脚本以删除内容
- javascript - 一键调用多个函数javascript
- r - R中方差分析后的汇总组差异
- python - 创建具有特定依赖项的 requirements.txt