2016-11-04 63 views
1

这里是数据swift3 Alamofire XML数据

Data: <?xml version="1.0" encoding="utf-8"?> 
<string xmlns="http://192.168.80.41:8081/WebServiceTest.asmx">[ 
    { 
    "NonCID": "n10909", 
    "Name": "aaaa", 
    "ClassType": "aa", 
    "City": "aaa", 
    "Area": "aaa", 
    "Address": "aaaa", 
    "TelArea": "02", 
    "Tel": "29857456", 
    "Latitude": 25.062047000000000, 
    "Longitude": 121.495241000000000 
    }, 
    { 
    "NonCID": "n10957", 
    "Name": "xxxx", 
    "ClassType": "xx", 
    "City": "xxx", 
    "Area": "xxx", 
    "Address": "xxxxx", 
    "TelArea": "02", 
    "Tel": "29736693", 
    "Latitude": 25.061227100000000, 
    "Longitude": 121.495149900000000 
    }, 
    { 
    "NonCID": "n10958", 
    "Name": "xxxx", 
    "ClassType": "xx", 
    "City": "xxx", 
    "Area": "xxx", 
    "Address": "xxxx", 
    "TelArea": "02", 
    "Tel": "29821024", 
    "Latitude": 25.061812900000000, 
    "Longitude": 121.495274000000000 
    }]</string> 

这里是我的代码

Alamofire.request("http://localhost/WebServiceTest.asmx/") .responseData { response in 
      debugPrint("All Response Info: \(response)") 
       if let data = response.result.value, let utf8Text = String(data: data, encoding: .utf8) { 
       print("Data: \(utf8Text)") 

      } 
     } 

当我运行这段代码获取数据,如我工作,我无法将数据表单[{“noncid”:“xxxx”,“Name”:“bbb”,........ etc}]转换为字典。

有谁知道我该如何获取数据到字典,我可以使用。 或有另一种方式可以做到这一点。谢谢大家的支持

回答

1

使用NSXMLParser解析与string XML元素名称关联的文本。然后,一旦您将该文本显示为JSON,请使用NSJSONSerialization解析JSON字符串以外的内容。

func parse(data: Data) { 
    // parse the xml 

    let parser = XMLParser(data: data) 
    parser.delegate = self 
    guard parser.parse() else { 
     print("xml parse error: \(parser.parserError?.localizedDescription)") 
     return 
    } 

    // get the parsedXMLString from 

    guard let value = parsedXMLString, let jsonData = value.data(using: .utf8) else { 
     print("cannot convert to data") 
     print("string: \(parsedElementValue)") 
     return 
    } 

    // try now parsing the JSON body 

    do { 
     guard let responseObject = try JSONSerialization.jsonObject(with: jsonData) as? [[String: Any]] else { 
      print("Unable to parse array of dictionaries from JSON") 
      print(value) 
      return 
     } 

     // use responseObject here 

     print(responseObject) 
    } catch let jsonError { 
     print("Unable to parse json: \(jsonError)") 
    } 
} 

如果你有几个特性:

fileprivate var parsedXMLString: String? 
fileprivate var parsedElementValue: String? 

你实现对XML解析器的扩展:

extension ViewController: XMLParserDelegate { 

    func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) { 
     if elementName == "string" { 
      parsedElementValue = "" 
     } 
    } 
    func parser(_ parser: XMLParser, foundCharacters string: String) { 
     parsedElementValue?.append(string) 
    } 

    func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { 
     if elementName == "string" { 
      parsedXMLString = parsedElementValue 
      parsedElementValue = nil 
     } 
    } 
} 

我必须说,虽然,这是一个非常奇怪的格式,在XML中看到JSON。通常你有一个或另一个...

+0

它的工作!!感谢很多欢呼声 – Jeff