2016-11-13 139 views
0

嗯,我正在使用这个库来解析xml:SwiftyXMLParser,但不幸的是无法从IOS中得到响应结果数组,但我可以在浏览器see this linksample of respond上看到它们!无法从URL解析XML确实API

这是我的操作:

URLSession.shared.dataTask(with: NSURL(string: urlString)! as URL, completionHandler: { (data, response, error) -> Void in 

    if error != nil { 
     print(error) 
     return 
    } 
    if let data = data { 
     let xml = XML.parse(data) 
     print(xml) 
     //tried xml["results"]["0"] also didn't work 
    } 

}).resume() 

这是我在IOS输出:

<response version="2"> 
<query>ios</query> 
<location>austin, tx</location> 
<clickedCategories/> 
<paginationPayload/> 
<radius>25</radius> 
<dupefilter>true</dupefilter> 
<highlight>false</highlight> 
<start>1</start> 
<end>10</end> 
<pageNumber>0</pageNumber> 
<totalresults>315</totalresults> 
<results> 
//This is array but No results!! 
<\results> 

因此,没有人知道这是为什么?如何?

谢谢。

我尝试使用JSON:

让indeedAPI =“api.indeed.com/ads/apisearch?publisher=4935138002921571 & Q =(SEARCHTERM)&格式= JSON & L =%2C + TX &排序= &半径= 50 & ST = & JT = &开始= &限制= 10 &清爽= &滤波器= &经纬度= 1 & CO = & CHNL = & USERIP = 1.2.3.4 & v = 2"

let googleYoutubeAPIUrl = URL(string: indeedAPI.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!) 

    let request:URLRequest = URLRequest(url: googleYoutubeAPIUrl!, cachePolicy: NSURLRequest.CachePolicy.reloadIgnoringCacheData, timeoutInterval: 5.0) 

    OperationQueue.main.cancelAllOperations() 
    let task = URLSession.shared.dataTask(with: request, completionHandler: { data, response, error in 

     if let _ = error { 
      print(error.debugDescription) 
      return 
     } 

     if let data = data { 
      completion(JSON(data: data)) 
     } else { print("data nil"); return } 

    }) 
    task.resume() 

{ 
    "paginationPayload" : "", 
    "location" : "%2C tx", 
    "dupefilter" : true, 
    "results" : [ 
// also no results 
    ], 
    "totalResults" : 0, 
    "version" : 2, 
    "end" : 0, 
    "pageNumber" : 0, 
    "start" : 0, 
    "query" : "ios developer", 
    "highlight" : true 
} 
+0

@Rob谢谢你,我已经添加了我的输出 –

+0

@Rob对不起再次,我已经编辑我的问题。谢谢 –

+0

'xml [“结果”]'甚至可以工作吗? – Larme

回答

0

如果你正在寻找的result条目,你可以这样做:

let xml = XML.parse(data) 

guard xml.error == nil else { 
    print("\(xml.error!)") 
    return 
} 

let results = xml["response", "results"] 

guard results.error == nil && results["result"].error == nil else { 
    print("no results") 
    return 
} 

for result in results["result"] { 
    if let jobtitle = result["jobtitle"].text { 
     print("\(jobtitle)") 
    } 
} 
+0

你的方法是正确的,但只有当响应有结果输入时它才能工作!这很奇怪,因为在响应中没有结果!这是我的问题,为什么响应不能在响应中包含结果?谢谢。 –

+0

@HamadFouad - 然后只需添加任何你想要的'guard'语句。你可以像上面那样做(检查'result'元素),或者为'totalResults'值添加'guard'语句。 – Rob