【问题标题】:Swift-Rss project-Can't get img src link inside CDATA blocksSwift-Rss 项目-无法在 CDATA 块中获取 img src 链接
【发布时间】:2015-11-13 09:49:46
【问题描述】:

我有一个非常烦人的问题。我正在为 Swift 开发一个 RSS 阅读器(使用 Xcode 7.1)。我希望我的表格视图的每个单元格都显示每个新闻的图像。这是我的代码:

     cell.itemImageView.image = UIImage(named: "placeholder")
     let news = items[indexPath.row] as MWFeedItem?
        if news?.content != nil {

        let htmlContent = news!.content as NSString
        var imageSource = ""

        let rangeOfString = NSMakeRange(0, htmlContent.length)
        let regex = try? NSRegularExpression(pattern: "(<img.*?src=\")(.*?)(\".*?>)", options: [])

        if htmlContent.length > 0 {
            let match = regex?.firstMatchInString(htmlContent as String, options: [], range: rangeOfString)

            if match != nil {
                let imageURL = htmlContent.substringWithRange(match!.rangeAtIndex(2)) as NSString
                print(imageURL)

                if NSString(string: imageURL.lowercaseString).rangeOfString("feedburner").location == NSNotFound {
                    imageSource = imageURL as String

                               }

                                }
        }

        if imageSource != "" {
            cell.itemImageView.setImageWithURL(NSURL(string: imageSource)!, placeholderImage: UIImage(named: "placeholder"))
       }
   else{
           cell.itemImageView.image = UIImage(named: "placeholder")
       }

    }

所以,问题在于:当 rss 提要 xml 文件没有 CDATA 块时,我的代码可以完美运行;在其他大多数情况下,它不起作用,因为在 xml 文件中有这样的结构:

<![CDATA[<p><a href="http://firenze.repubblica.it/cronaca/2015/11/12/news/la_denuncia_dei_genitori_di_una_scuola_di_firenze_la_mostra_divina_bellezza_vietata_ai_bambini_-127167480/?rssimage"> <img src="http://www.repstatic.it/content/nazionale/img/2015/11/12/115530091-51ce67c2-7b38-41c1-8aa5-21d51b157335.jpg" width="140" align="left" hspace="10"></a>I genitori contro la scelta del consiglio interclasse delle terze elementari dell'istituto Matteotti di fermare la gita all'esposizione "Divina Bellezza" sul...</p>]]></description><guid isPermaLink="true"><!

很明显,CDATA 块不允许我读取 img src 链接。我能做些什么? 提前感谢您的帮助!

【问题讨论】:

  • 最好将xml内容粘贴为一个整体,以便我们知道您要抓取的内容的哪一部分
  • 这是完整的 xml 代码:repubblica.it/rss/homepage/rss2.0.xml 我需要
  • 是不是如果
  • 是的,没错。我该怎么办?
  • 你可以参考我下面的回答,你的正则表达式完全没问题,你只需要从中取出所有的匹配项

标签: regex xml swift rss cdata


【解决方案1】:

我使用您的正则表达式在 PlayGround 中运行以下代码,并成功从 xml 中获取了所有 img src url。

import Foundation

let url = NSURL(string: "http://www.repubblica.it/rss/homepage/rss2.0.xml")!
let xml = try String(contentsOfURL: url)
let regex = try NSRegularExpression(pattern: "(<img.*?src=\")(.*?)(\".*?>)", options: [])
let range = NSMakeRange(0, xml.characters.count)
regex.enumerateMatchesInString(xml, options: [], range: range) { (result, _, _) -> Void in
  let nsrange = result!.rangeAtIndex(2)
  let start = xml.startIndex.advancedBy(nsrange.location)
  let end = start.advancedBy(nsrange.length)
  print(xml[start..<end])
}

【讨论】:

  • 非常感谢您的建议!现在我有另一个问题:如果我在你之后使用我的第一个帖子正则表达式,作为输入 xml 值,它会为所有单元格返回相同的图像!我怎样才能为每条新闻显示正确的图像?感谢您的建议!
  • 你应该使用我用你的tableview打印的东西。将它们保存到数组中并实现您的数据源委托方法
  • 你能给我一个类似的实施项目吗?我是 Swift 新手。
  • codingexplorer.com/getting-started-uitableview-swift这样的文章教你如何使用UITableView
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2016-12-05
  • 2020-03-11
相关资源
最近更新 更多