2016-01-04 83 views
0

我是新來的swift編程。循環通過xml NSData變量並在swift中獲取值2.1

我寫了後者從rss飼料xml輸出,並將其解析爲NSDATA類型的代碼, 那麼我想從它titleimagesrc值在一個循環,並將它們發送到表格視圖中創建一個列表。

,當我得到這些值手動我的意思是這樣的:

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() 

回答

0

方案非常簡單:只需要​​創建一個與索引內循環。

這裏是代碼:

//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() 

     }