【问题标题】:Getting wrong item count after string replacing字符串替换后得到错误的项目计数
【发布时间】:2016-01-06 07:35:32
【问题描述】:

我编写了一个代码,它从rss 提要中获取xml 数据,然后将NSDATA 类型转换为string 并替换string 中的一个html 标记,这使得xml 可读,然后转换它回到NSDATA 类型。

我面临的问题是字符串替换之前和之后的项目数不同。

在替换 html 标签之前,xml 项目数是 388,但之后是 182

我该如何解决这个问题?

减少项目计数错误的代码:

import UIKit

struct Apps {
    var name : String!
    var img : String!
}

class clipsTableViewController: UITableViewController {
    var tableData = [Apps]()

    override func viewDidLoad() {
        super.viewDidLoad()
        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)

            //one root element
            let count = xml["rss"]["channel"]["item"].all.count
            print(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()
            }           
        }
        task.resume()
    }

【问题讨论】:

    标签: html ios swift replace tags


    【解决方案1】:

    试试这个

    import UIKit
    
    struct Apps {
        var name : String!
        var img : String!
    }
    
    class clipsTableViewController: UITableViewController {
        var tableData = [Apps]()
    
        override func viewDidLoad() {
            super.viewDidLoad()
            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)
    
                //one root element
                let count = xml["rss"]["channel"]["item"].all.count
                print(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()
                }           
            }
            task.resume()
        }
    

    原因: 你一开始就去掉了“&lt;!\[CDATA[”,但最后只去掉了“]]”,因为字符'>'会导致标签不匹配,所以只需将“]]”更改为“]]&gt;”。这将按照您的逻辑工作。

    【讨论】:

    • 感谢我错过的提示。但是这个修复并没有解决计数仍然是 182 的问题
    猜你喜欢
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 2011-01-21
    • 1970-01-01
    相关资源
    最近更新 更多