【问题标题】:Getting error in parsing xml using SWXMLHash with Alamofire使用 SWXMLHash 和 Alamofire 解析 xml 时出错
【发布时间】:2018-01-03 11:52:41
【问题描述】:

我正在使用 Swift 4 的 pod

pod 'SWXMLHash', '~> 4.0.0'
pod 'Alamofire', '~> 4.5'

当我使用以下代码解析 XML 时,出现错误:

Type 'XMLIndexer' does not conform to protocol 'Sequence'

代码:

Alamofire.request("https://itunes.apple.com/us/rss/topgrossingapplications/limit=10/xml").response { response in
            debugPrint(response)

            guard let data = response.data else {
                return
            }

            let xml = SWXMLHash.parse(data)
            let nodes = xml["feed"]["entry"]
            for node in nodes {
                print(node["title"].text)
            }
        }

我正在尝试从 iTunes XML URL 上方访问“条目”标签列表。 如果有任何方法可以访问和初始化类/结构中的条目列表,请帮助。

【问题讨论】:

    标签: swift xml parsing alamofire swxmlhash


    【解决方案1】:

    根据需要添加的文档all:

    Alamofire.request("https://itunes.apple.com/us/rss/topgrossingapplications/limit=10/xml").response { response in
            debugPrint(response)
    
            guard let data = response.data else {
                return
            }
    
            let xml = SWXMLHash.parse(data)
            let nodes = xml["feed"]["entry"]
            for node in nodes.all {
                print(node["title"]?.text)
            }
        }
    

    【讨论】:

    • 这是正确的——当 Swift 4 出现时,Sequence 协议发生了重大变化,因此将其删除以支持调用 all 方法。
    • 我试过 Alamofire.request("itunes.apple.com/us/rss/topgrossingapplications/limit=10/… { response in debugPrint(response) guard let data = response.data else { return completion(.Failure("No weather item found")) } let xml = SWXMLHash.parse(data) let nodes = xml["feed"]["entry"] for node in nodes.all { print(node["title"].description) } }
    • 1- po xml ▿ ▿ element : 2- po xml["feed"] ▿ ▿ xmlError : XML Element Error: Incorrect key ["feed"] - key : "feed" 3- po xml["feed"]["entry"] ▿ ▿ xmlError : XML Element Error: Incorrect key ["entry"] - key : "entry"
    • 请扩展您的问题。您在 cmets 中写的内容不可读。
    【解决方案2】:

    另一个解决方案是使用Fuzi,它基于Ono框架,得到了很好的支持。

    下面的 sn-p 将打印标题:

    Alamofire.request("https://itunes.apple.com/us/rss/topgrossingapplications/limit=10/xml").responseString { response in
        guard let xml = try? XMLDocument(string: response.value ?? "") else {
            return
        }
        guard let feed = xml.root else {
            return
        }
        for entry in feed.children(tag: "entry") {
            let title = entry.firstChild(tag: "title")?.stringValue ?? ""
            print(title)
        }
    }
    

    【讨论】:

    • 在服务器响应后解析我的另一个 xml 时,我得到了一些符号响应,如下所示:- XML:w3.org/1999/xhtml" xmlns="sitemaps.org/schemas/sitemap/0.9"> [Hindi]लखनऊ,वाराणसी,पटना,गयागयामेंसीज़नकासबसेकमन्यूनतम,दिनदिनमेंमिलेगी,रातरातमेंबढ़ेगीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दीसर्दी项目>
    • 它在印地语、泰米尔语(如一些印度语言)中有一些其他语言的内容,如上面评论中所述。当我尝试打印时,它会打印一些符号字符,例如: - po entry.firstChild(tag: "title")?.stringValue ▿ Optional - some : "[Hindi] लà¤à¤¨à¤, वाराणसà¥, पà¤à¤¨à¤¾, à¤à¤¯à¤¾ मà¥à¤ सà¥à ¥à¤¨ à¤à¤¾ सबसॠà¤à¤® नà¥à¤¯à¥à¤¨à¤¤à¤® à¤¤à¤¾à ¤ªà¤®à¤¾à¤¨, दिन मà¥à¤ मिलà¥à¤à¥ राहत , रात मà¥à¤ बà¥à¥à¤à¥ सरà¥à¤¦à¥"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 2016-06-12
    • 2013-03-07
    相关资源
    最近更新 更多