SWXMLHash:如何为非常深的XML构建struct?

时间:2018-02-15 15:30:38

标签: alamofire swxmlhash

我现在正致力于复杂的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

1 个答案:

答案 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的值作为字符串以供将来使用