首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Swift中解析XML web服务?

如何在Swift中解析XML web服务?
EN

Stack Overflow用户
提问于 2014-11-23 16:26:03
回答 3查看 18.2K关注 0票数 12

我不知道如何在下面的代码中解析。有没有人

代码语言:javascript
复制
func callService(usr: String, pwdCode: String) {

    let url = NSURL(string: "http://inspect.dev.cbre.eu/SyncServices/api/jobmanagement/PlusContactAuthenticationPost")
    var xmlParse:NSString  = ""
    var data : NSData!
    let request = NSMutableURLRequest(URL: url!)
    request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
     request.HTTPMethod = "POST"
    let dictionary = ["email": usr, "userPwd": pwdCode]
    var error: NSError?
    if let body = NSJSONSerialization.dataWithJSONObject(dictionary, options: nil, error: &error) {
        request.HTTPBody = body
    } else {
        println("JSON error: \(error)")
    }

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
        (data, response, error) in
        println(NSString(data: data, encoding: NSUTF8StringEncoding))

        // xmlParse=NSString(data: data, encoding: NSUTF8StringEncoding)!
        // let data = (xmlParse as NSString).dataUsingEncoding(NSUTF8StringEncoding)
        // NSXMLParser(data : NSData)

        // xmlParse=NSString(data: data, encoding: NSUTF8StringEncoding)!
        // xmlParse=response
        // println(xmlParse)
    }
    task.resume()

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-24 20:27:52

您应该在请求的完成处理程序中使用NSXMLParser

代码语言:javascript
复制
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
    (data, response, error) in

    if data == nil {
        println("dataTaskWithRequest error: \(error)")
        return
    }

    let parser = NSXMLParser(data: data)
    parser.delegate = self
    parser.parse()

    // you can now check the value of the `success` variable here
}
task.resume()

// but obviously don't try to use it here here

显然,以上假设您已经(a)定义了符合NSXMLParserDelegate的视图控制器,并且(b)已经实现了NSXMLParserDelegate方法,例如:

代码语言:javascript
复制
var elementValue: String?
var success = false

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {
    if elementName == "success" {
        elementValue = String()
    }
}

func parser(parser: NSXMLParser, foundCharacters string: String?) {
    if elementValue != nil {
        elementValue! += string
    }
}

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
    if elementName == "success" {
        if elementValue == "true" {
            success = true
        }
        elementValue = nil
    }
}

func parser(parser: NSXMLParser, parseErrorOccurred parseError: NSError) {
    println("parseErrorOccurred: \(parseError)")
}
票数 7
EN

Stack Overflow用户

发布于 2015-07-31 12:57:49

对于任何还在寻找的人,下面是我使用的代码,它很好地将xml响应转换为字典/数组,这要归功于SWXMLHash类……

更新了SWIFT 2.0

代码语言:javascript
复制
    let baseUrl = "http://www.example.com/file.xml"
    let request = NSMutableURLRequest(URL: NSURL(string: baseUrl)!)
    let session = NSURLSession.sharedSession()
    request.HTTPMethod = "GET"

    var err: NSError?

    let task = session.dataTaskWithRequest(request) {
        (data, response, error) in

        if data == nil {
            print("dataTaskWithRequest error: \(error)")
            return
        }

        let xml = SWXMLHash.parse(data)

        if let definition = xml["entry_list"]["entry"][0]["def"].element?.text {
            // ...
        }

        dispatch_async(dispatch_get_main_queue(),{
            // use main thread for UI updates
        })

    }
    task.resume()
票数 9
EN

Stack Overflow用户

发布于 2016-07-07 18:54:32

我使用下面创建的类从XML数据中获取字典。

https://github.com/Bhaavik/BDXmlParser

您需要添加该类,并只需调用下面的函数即可获得字典响应

代码语言:javascript
复制
  let objXmlParser = BbXmlParser()
  let  dictResponse  =  objXmlParser.getdictionaryFromXmlData(data!)
                        print(dictResponse)

这是你的字典。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27086989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档