我现在正致力于复杂的XML解析。
以下是链接:https://www.reddit.com/hot/.rss
我使用Alamofire获取数据:
protocol APIUsable {
}
struct API:APIUsable {
static func fetchRedditFeedListData() -> Observable<[Entry]>{
let URL = "https://www.reddit.com/hot/.rss"
return Observable.create { observer in
Alamofire.request(URL).response { response in
guard let data = response.data else {
return
}
do {
let xml = SWXMLHash.parse(data)
let entries: [Entry] = try xml["feed"]["entry"].value()
observer.onNext(entries)
} catch let error as NSError {
print(error.localizedDescription)
}
observer.onCompleted()
}
return Disposables.create()
}
}
}
以下是我为解析构建的结构。它运作良好。
struct Entry: XMLIndexerDeserializable {
let title: String
let updated: String
let category: String
let content: String
static func deserialize(_ node: XMLIndexer) throws -> Entry {
return try Entry(
title: node["title"].value(),
updated: node["updated"].value(),
category: node["category"].value(ofAttribute: "term"),
content: node["content"].value()
)
}
}
但我也想让图像字符串属于内容,img,src
答案 0 :(得分:0)
我自己找到了解决方案。
我们可以看到XML中有一个HTML。
因此,我再次使用SWXMLHash来解析内容
let xml = SWXMLHash.parse(/*put the content String here*/)
let imageString = xml ["table"]["tr"]["td"][0]["a"]["img"].element?.attribute(by: "src")?.text
然后我们可以将src的值作为字符串以供将来使用