[英]XML parsing in swift not working, no errors
我試圖直接從URL解析xml文件代碼沒有錯誤,應用程序打開正常但tableview為空。 這里是鏈接和我使用的代碼,如果我能得到一些指導,將不勝感激。
https://www.ruralfire.qld.gov.au/bushfirealert/bushfireAlert.xml
我最初是通過教程構建的(只是學習繩索)
import UIKit
class firecallViewController: UIViewController, NSXMLParserDelegate{
@IBOutlet var tbData: UITableView?
var parser = NSXMLParser()
var posts = NSMutableArray()
var elements = NSMutableDictionary()
var element = NSString()
var title1 = NSMutableString()
var date = NSMutableString()
override func viewDidLoad()
{
super.viewDidLoad()
self.beginParsing()
}
func beginParsing()
{
posts = []
parser = NSXMLParser(contentsOfURL:(NSURL(string:"https://www.ruralfire.qld.gov.au/bushfirealert/bushfireAlert.xml"))!)!
parser.delegate = self
parser.parse()
tbData!.reloadData()
}
//XMLParser Methods
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String])
{
element = elementName
if (elementName as NSString).isEqualToString("item")
{
elements = NSMutableDictionary()
elements = [:]
title1 = NSMutableString()
title1 = ""
date = NSMutableString()
date = ""
}
}
func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?)
{
if (elementName as NSString).isEqualToString("item") {
if !title1.isEqual(nil) {
elements.setObject(title1, forKey: "title")
}
if !date.isEqual(nil) {
elements.setObject(date, forKey: "date")
}
posts.addObject(elements)
}
}
func parser(parser: NSXMLParser, foundCharacters string: String)
{
if element.isEqualToString("title") {
title1.appendString(string)
} else if element.isEqualToString("pubDate") {
date.appendString(string)
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return posts.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
var cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell")!
if(cell.isEqual(NSNull)) {
cell = NSBundle.mainBundle().loadNibNamed("Cell", owner: self, options: nil)[0] as! UITableViewCell;
}
cell.textLabel?.text = posts.objectAtIndex(indexPath.row).valueForKey("title") as! NSString as String
cell.detailTextLabel?.text = posts.objectAtIndex(indexPath.row).valueForKey("date") as! NSString as String
return cell as UITableViewCell
}
}
更新的答案
你在評論中告訴我你不必使用NSXMLParser。
在這種情況下,我有一個簡單的解析解決方案:使用CheatyXML ,一個非常簡單的庫。
首先,按照簡單的安裝說明進行操作 。
然后使用您的URL創建一個解析器:
import CheatyXML
let feedUrl = NSURL(string: "https://www.ruralfire.qld.gov.au/bushfirealert/bushfireAlert.xml")!
let parser = XMLParser(contentsOfURL: feedUrl)
並安全地解開所有值,就像您正在下載字典一樣,並使用.string
屬性來獲取字符串字段內容。
像這樣:
if let parser = parser,
channel = parser["channel"],
title = channel["title"].string,
link = channel["link"].string,
description = channel["description"].string,
docs = channel["docs"].string,
generator = channel["generator"].string {
print(title)
print(link)
print(description)
print(docs)
print(generator)
}
結果:
QFES當前事件
HTTP://bneags01.desqld.internal/publicfeed/PublicRssFeed.aspx
QFES當前事件
http://www.rssboard.org/rss-specification
Argotic Syndication Framework
現在,而不是我的系列print
你調用你的方法來填充你的變量,然后你重新加載表視圖,然后你設置。
老答案
的NSXMLParser以異步方式工作,所以當你在刷新你的表beginParsing()
該數據尚未解析。
解析器完成解析后,您需要重新加載表。
幸運的是,有一個回調。
刪除tbData!.reloadData()
從beginParsing()
和該委托的方法添加到您的視圖控制器來代替:
func parserDidEndDocument(parser: NSXMLParser) {
tbData!.reloadData()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.