【问题标题】:Unable to parse XML from URL for indeed API无法从 URL 解析 XML 以获取确实 API
【发布时间】:2017-03-27 07:30:10
【问题描述】:

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

这是我的操作:

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 的尝试:

let IndeedAPI = "api.indeed.com/ads/apisearch?publisher=4935138002921571&q=(searchTerm)&format=json&l=%2C+tx&sort=&radius=50&st=&jt=&start=&limit=10&fromage=&filter=&latlong=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
}

【问题讨论】:

  • @Rob 谢谢,我已经添加了我的输出
  • @Rob 再次抱歉,我已经编辑了我的问题。谢谢
  • xml["results"] 还能用吗?
  • @Rob 尝试了 google places api xml 并且工作正常,但确实 api 嗯这很奇怪,因为我的输出(api 响应)不包括结果数组
  • 如果您有关于使用 JSON 的问题,那么这应该是一个单独的问题,而不是在这个 SwiftyXMLParser 问题中合并。我建议从这里删除 JSON 尝试...

标签: ios xml api parsing


【解决方案1】:

如果您正在寻找 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)")
    }
}

【讨论】:

  • 您的方法是正确的,但当且仅当响应有结果条目时它才会起作用!这很奇怪,因为响应中没有结果!这是我的问题,为什么响应不能在响应中包含结果?谢谢。
  • @HamadFouad - 然后添加任何你想要的guard 语句。您可以像我上面那样做(检查result 元素),或者为totalResults 值添加guard 语句。
猜你喜欢
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
相关资源
最近更新 更多