0

我是快速编程的新手。

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

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

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

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

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

我能设法工作的是下面的代码,它返回我不想要的所有 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()
4

1 回答 1

0

非常简单的解决方案:只需要在里面创建一个带有索引器的 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()

        }
于 2016-01-05T07:25:09.183 回答