【问题标题】:Swift parser.parse() returns false, but no parserErrorSwift parser.parse() 返回 false,但没有 parserError
【发布时间】:2015-02-24 16:55:27
【问题描述】:

我正在尝试创建一个 iOS 应用程序,它从网站(在我的情况下为 http://www.quest.nl/rss)读取 RSS 提要,将 RSS 解析为 UITableView,用户可以从中选择一篇文章。所选文章随后会显示在 UIWebView 中。我可以成功解析 XML,但是当我尝试解析文章链接时(文章链接是 html,但我想我也可以使用 NSXMLParser)我遇到了问题。 parser?.parse() 返回 false(表示出现问题),但 parser?.parserError 的内容仍然为零。

我的代码:

@objc protocol HTMLParserDelegate{
    func parsingWasFinished()
}

import UIKit

class HTMLParser: NSObject, NSXMLParserDelegate {

    func startParsingWithContentsOfURL(linkURL: NSURL) {
        let parser = NSXMLParser(contentsOfURL: linkURL)
        parser?.delegate = self
        println(parser?.parse())
    }

    func parser(parser: NSXMLParser!, parseErrorOccured parseError: NSError!) {
        println(parseError.description)
    }

    func parser(parser: NSXMLParser, 
                validationErrorOccured validationError: NSError!) {
        println(validationError.description)
    }

    func parserDidEndDocument(parser: NSXMLParser!) {
        //println("finished! :D")
        delegate?.parsingWasFinished()
    }
}

我已经尝试删除我为解析器实现的所有方法(见上文),但即使这样也没有解决解析问题。

使用 url 进行测试 (http://www.quest.nl/foto/de-5-gekste-dieren-van-2014),我注意到解析器到达第 80 行,但没有到达第 95 行,同时成功解析了所有先前的标签。

【问题讨论】:

  • 一般不能使用NSXMLParser解析HTML。您应该考虑使用 THPPL。见How to Parse HTML on iOS
  • 顺便说一下,如果您正在寻找关于某些内容不符合 XML 标准的详细信息的更具描述性的错误,通常命令行 xmllint 程序很有启发性。我不确定在这种情况下是否需要它,但如果您在解析您认为是有效 XML 的内容时遇到问题,xmllint 是一个很好的资源,可以放在您的口袋里。

标签: html ios parsing swift nsxmlparser


【解决方案1】:

感谢 Rob 的评论,让我看看 Hpple,它解决了我的问题。

对于任何寻求我问题答案的人,我将很快详细说明我的步骤。 确实,HTML 不等于 XML,尽管我使用的 HTML 的格式非常好,但 XML Parsers 在处理代码方面存在很大问题。然后我转向 Hpple,它非常好用且用户友好,并使用了我在 Github 找到的代码,我将其添加到我的项目中,从那时起,我可以使用 Hpple 和漂亮、易于使用的语法解析 HTML,没有任何问题。

感谢大家的提示!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-27
    • 2014-03-12
    • 2011-07-26
    • 2023-03-29
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    相关资源
    最近更新 更多