iOS Swift NSXMLPARSER 不解析整个网站

iOS Swift NSXMLPARSER does not parse the whole website

我在 Swift 上使用 NSXMLParser 遇到了一个奇怪的情况。

我使用以下代码开始解析来自 url

的完整网站
  func xmlAnalyser(tmp_http: String, tmp_url: String) {
    let tmp_str: String = tmp_http + tmp_url
    let url = NSURL(string: tmp_str)

    ParserXML = NSXMLParser(contentsOfURL: url!)!
    ParserXML.delegate = self
    ParserXML.parse()
}

例如,对于 http://www.techcrunch.com,解析器不解析整个 XML,某些 link 标记以某种方式被跳过,我无法弄清楚,例如, 用下面的方法

  func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {

    print("elementName: \(elementName)")

    if elementName == "link" {
        let type = attributeDict["type"]
        if type == "application/rss+xml" {
            print("feed found: \(href)")
        } else {
            print("not found")
        }
    }
}

解析器以某种方式找不到类型 "application/rss+xml",但如果我查看网站源代码,它就在那里。并非所有网站都会发生这种情况,例如,如果我尝试使用 mashable.com,则会找到 rss 标签,但在 techcrunch 上却找不到。

是不是XML太大了?我是否必须将它存储在两个不同的变量中,然后将它们一一解析?

刚刚发现解析 HTML 的最佳方法是使用 Kanna Parser,以前称为 SWIFT-HTML-Parser)。 已解决。

尝试HTMLKit。它也可以与 Swift 一起使用。要解决您的特定问题,它会是这样的:

import HTMLKit
let document = HTMLDocument(string: htmlString) // htmlString is the source of the HTML page
let rssLinks = document.querySelectorAll("link[type='application/rss+xml']")
// you get an array of HTMLElements
for link in links {
  print(link.outerHTML)
  print(link["href"])
  // and so on ...
}

HTMLKit 是一个纯粹的 Objective-C HTML 解析器,支持 CSS3 选择器。它不是 libxml 或任何其他库的包装器,而是一个完整的 WHATWG HTML specification-compliant 实现。