斯威夫特 - RSS项目 - 不能得到CDATA块
问题描述:
我有一个非常恼人的问题,里面IMG SRC的链接。我正在开发Swift的RSS阅读器(使用Xcode 7.1)。我希望我的tableview的每个单元格显示每个新闻的图像。这里是我的代码:斯威夫特 - RSS项目 - 不能得到CDATA块
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所有的IMG SRC网址执行。
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内容作为一个整体,使我们知道的,你想抓住 – cezheng
这里的部分内容是完整的XML代码:HTTP://www.repubblica.it/rss/homepage/ rss2.0.xml我需要字符串在
Swift1
是,如果
cezheng