Swift 4 - 使用 UITableView 进行 xml 解析



我想从XML URL中获取值,但我没有任何错误。我试图理解我的错误。这是我的代码:

import UIKit
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,XMLParserDelegate {
@IBOutlet weak var tblView: UITableView!
var parser = XMLParser()
var haberler = NSMutableArray()
var elements = NSMutableDictionary()
var element = NSString()
var title1 = NSMutableString()
var link = NSMutableString()
override func viewDidLoad() {
super.viewDidLoad()
parsinDataFromURL()
}

我的解析 xml 函数

func parsinDataFromURL() {
haberler = []
parser = XMLParser(contentsOf: NSURL(string: "http://www.haberturk.com/rss/kategori/gundem.xml")! as URL)!
parser.delegate = self
parser.parse()
tblView.reloadData()
}

didStartElement,FoundCharacters和didEndElement函数

func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
if (elementName as NSString) .isEqual(to: "item") {
elements = NSMutableDictionary()
elements = [:]
title1 = NSMutableString()
title1 = " "
link = " "
}
}
func parser(_ parser: XMLParser, foundCharacters string: String) {
if element .isEqual(to: "title") {
title1.append(string)
}
else if element.isEqual(to: "link") {
link.append(string)
}
}
func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
if (elementName as NSString) . isEqual(to: "item") {
if !title1.isEqual(nil) {
elements.setObject(title1, forKey: "title" as NSCopying)
}
if !link .isEqual(nil) {
elements.setObject(link, forKey: "link" as NSCopying)
}
haberler.addObjects(from: [elements])
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return haberler.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: ("myCell"))! as UITableViewCell
if (cell.isEqual(NSNull.self)) {
cell = Bundle.main.loadNibNamed("myCell", owner: self, options: nil)![0] as! UITableViewCell    
}
cell.textLabel?.text = (haberler.object(at: indexPath.row) as AnyObject).value(forKey: "title") as? String
cell.detailTextLabel?.text = (haberler.object(at: indexPath.row) as AnyObject).value(forKey: "title") as? String
return cell
}
}

当我在模拟器中运行时,UITableView是空的(空的UITableViewscreen:https://i.stack.imgur.com/bWX2C.jpg(

你必须实现

func parserDidEndDocument(_ parser: XMLParser) {
tblView.reloadData()
}

//

验证是否在viewDidLoad中设置了表数据源

self.tblView.dataSource = self

最新更新