iOS Swift NSXMLPARSER不解析整个网站

时间:2015-12-23 00:57:18

标签: ios swift swift2 nsxmlparser

我在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,Parser不解析整个XML,某些链接标记会以某种方式被跳过,我无法弄清楚,例如,使用以下方法

  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太大了吗?我必须将它存储在两个不同的变量中,然后逐个解析它们吗?

2 个答案:

答案 0 :(得分:1)

试试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是一个支持CSS3选择器的纯Objective-C HTML解析器。它不是libxml或任何其他库的包装器,而是完整的WHATWG HTML规范兼容实现。

答案 1 :(得分:0)

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