Regex Swift Rss项目可以';无法在CDATA块内获取img src链接

Regex Swift Rss项目可以';无法在CDATA块内获取img src链接,regex,xml,swift,rss,cdata,Regex,Xml,Swift,Rss,Cdata,我有一个很烦人的问题。我正在为Swift开发一个RSS阅读器(使用Xcode 7.1)。我希望我的tableview的每个单元格显示每个新闻的图像。这是我的密码: cell.itemImageView.image = UIImage(named: "placeholder") let news = items[indexPath.row] as MWFeedItem? if news?.content != nil { let htmlCon

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

     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")
       }

    }
cell.itemImageView.image=UIImage(名为:“占位符”)
让news=items[indexPath.row]作为MWFeedItem?
如果是新闻?.content!=零{
让htmlContent=news!.content作为NSString
var imageSource=“”
让rangeOfsString=NSMakeRange(0,htmlContent.length)
让regex=try?NSRegularExpression(模式:“()”,选项:[])
如果htmlContent.length>0{
让match=regex?.firstMatchInString(htmlContent作为字符串,选项:[],范围:rangeOfString)
如果匹配!=零{
将imageURL=htmlContent.substringWithRange(match!.RangeAtinex(2))作为NSString
打印(图像URL)
如果NSString(string:imageURL.lowercaseString).rangeOfString(“feedburner”).location==NSNotFound{
imageSource=imageURL作为字符串
}
}
}
如果imageSource!“”{
cell.itemImageView.setImageWithURL(NSURL(字符串:imageSource)!,占位符图像:UIImage(名为:“占位符”))
}
否则{
cell.itemImageView.image=UIImage(名为“占位符”)
}
}
所以,问题在于:当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"><!
I genitori contro la scelta del consiglio Interclass de le terze elementari dell'istituto Matteotti di fermare la gita all'esposizione“Divina Bellezza”sul…

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

我使用您的正则表达式在操场上运行了以下代码,并成功地从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])
}
<代码>导入基础 让url=NSURL(字符串:http://www.repubblica.it/rss/homepage/rss2.0.xml")! 让xml=try字符串(contentsOfURL:url) 让regex=尝试NSRegularExpression(模式:“()”,选项:[]) let range=NSMakeRange(0,xml.characters.count) regex.EnumerateMatchesInstalling(xml,选项:[],范围:range){(结果,,)->Void in 设nsrange=result!.rangeAtIndex(2) 让start=xml.startIndex.advancedBy(nsrange.location) let end=start.advancedBy(nsrange.length)
打印(xml)[开始..最好将xml内容作为一个整体粘贴,以便我们知道您想要获取的内容的哪一部分这里是完整的xml代码:我需要字符串,如果是的话,我能做什么?您可以参考我下面的答案,您的正则表达式非常好,您只需要从中获取所有匹配项非常感谢您的建议!现在我有另一个问题:如果我在你的post regex之后使用我的第一个post regex,作为输入xml值,它会为所有单元格返回相同的图像!我如何才能为每个新闻显示正确的图像?谢谢你的建议!你应该使用我在tableview中打印的内容。将它们保存到数组中,并实现你的数据源委托方法扫描你的链接请告诉我类似的实现项目?我是Swift新手。类似的文章将教您如何使用UITableView