我有一个iPhone应用程序,可以使用NSURLSession
从我的工作网站下载网站的某些页面。然后我用NSXMLParser
解析网页,并显示我在TableView中获得的信息。我知道HTML不是XML,NSXMLParser
做得很好而且使用简单。直到几天前,当我们的IT部门对他们的系统进行更新时,这工作正常。试图找出问题所在,似乎我的代码实际上仍然正常工作,但问题是我需要的一些HTML属性不再被NSURLSession
看到。
这是我用来下载网页的代码:
func loadPage(linkToFollow: String) {
// make NSURLSession task
let url: NSURL = NSURL(string: linkToFollow)!
let request: NSURLRequest = NSURLRequest(URL: url)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
config.allowsCellularAccess = true
let session = NSURLSession(configuration: config, delegate: self, delegateQueue: NSOperationQueue.mainQueue())
let task: NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler: {(data : NSData?, response : NSURLResponse?, error : NSError?) in
if error != nil {
print(error!.description)
} else {
// make string of data and log
let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)! as String
print("\nDATASTRING:\n")
print(dataString)
// data directly to an NSXMLParser
let myParser: NSXMLParser = NSXMLParser(data: data!)
myParser.delegate = self
myParser.parse()
}
})
task.resume()
}
在浏览器中,页面与以前相同。查看Safari中的源代码(Firefox和Chrome中的结果相同):
<td class="TableCellContent"><input name="txtReisNummer_Weergave" type="text" value="R2015-065707" readonly="readonly" id="txtReisNummer_Weergave" class="TextBoxNormal" style="width:400px;" /></td>
我需要的属性是value-attribute:' value =“R2015-065707”'。
当我将数据NSURLSession
下载到字符串中时(参见上面的代码),它看起来像这样:
<td class="TableCellContent"><input name="txtReisNummer_Weergave" type="text" readonly="readonly" id="txtReisNummer_Weergave" class="TextBoxNormal" /></td>
其中两个属性已经消失:'value'和'style'属性。
当我让解析器记录属性字典的描述时,我得到了这个:
attributeDict, description = ["name": "txtReisNummer_Weergave", "type": "text", "id": "txtReisNummer_Weergave", "class": "TextBoxNormal", "readonly": "readonly"]
这与记录数据字符串的结果相同,'value'和'style'属性消失了。
所以我需要知道的是为什么NSURLSession忽略了源代码中的两个属性?我能做些什么来纠正这个问题,以便获得我需要的数据?
非常感谢任何帮助!