遍历 xml NSData 变量并获取 swift 中的值 2.1

Loop through xml NSData variable and get values in swift 2.1

我是 swift 编程新手。

我写了一段代码,它从 rss 提要中获取 xml 输出并将其解析为 NSDATA 类型, 然后我想在循环中从中获取 titleimage src 值并将它们发送到 table 视图以创建列表。

当我手动获取这些值时,我的意思是:

let appName = xml["rss"]["channel"]["item"][0]["title"].element!.text!
let appUrl = xml["rss"]["channel"]["item"][0]["description"]["img"].element!.attributes["src"]

我的代码工作正常,并且在 table 视图中正确创建了一项。 但问题是当我想从 xml 文件中获取所有值时。

我无法创建 xml 的数组,它是 NSDATA 类型,不是能够循环遍历它的字符串。

我能设法工作的是下面的代码,其中 returns 所有 xml 标签值我不想要那个:

func enumerate(indexer: XMLIndexer, level: Int) {
                for child in indexer.children {
                    let appName = child.element!.text
                    let appUrl = child.element!.attributes["src"]


                    let ap = Apps(name: appName , img : appUrl)
                    self.tableData.append(ap)

                    self.tableView.reloadData()

                    enumerate(child, level: level + 1)
                }
            }

            enumerate(xml, level: 0)

知道如何在循环中获取这些值而不会弄错或获取其他值吗?

这是我的代码:

     let url = NSURL(string: "http://razavitv.aqr.ir/index/rss/2")

        let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in


            let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) as! String

            let processedString = (dataString as NSString).stringByReplacingOccurrencesOfString("<![CDATA[", withString: "").stringByReplacingOccurrencesOfString("]]", withString: "") as String

            let data: NSData = processedString.dataUsingEncoding(NSUTF8StringEncoding)!

            let xml = SWXMLHash.parse(data)


//                    let appName = xml["rss"]["channel"]["item"][0]["title"].element!.text!
//                    let appUrl = xml["rss"]["channel"]["item"][0]["description"]["img"].element!.attributes["src"]
//    
//                    let ap = Apps(name: appName , img : appUrl)
//                    self.tableData.append(ap)
//            
//                    self.tableView.reloadData()




            func enumerate(indexer: XMLIndexer, level: Int) {
                for child in indexer.children {
                    let appName = child.element!.text
                    let appUrl = child.element!.attributes["src"]


                    let ap = Apps(name: appName , img : appUrl)
                    self.tableData.append(ap)

                    self.tableView.reloadData()

                    enumerate(child, level: level + 1)
                }
            }

            enumerate(xml, level: 0)


        }

        task.resume()

非常简单的解决方案:只需要创建一个带有索引器的 for 循环。

这是代码:

   //one root element
        let count = xml["rss"]["channel"]["item"].all.count



        for var i = 0; i < count; i++ {
                let appName = xml["rss"]["channel"]["item"][i]["title"].element!.text!
                let appUrl = xml["rss"]["channel"]["item"][i]["description"]["img"].element!.attributes["src"]



                let ap = Apps(name: appName , img : appUrl)
                self.tableData.append(ap)

                self.tableView.reloadData()

        }