xml解析(SAX)

//
//  ViewController.swift
//  xml解析
//
//  Created by admin on 16/2/25.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UITableViewController,NSXMLParserDelegate {

    lazy var videos:[Video] = []
    lazy var nodeString:String = ""
    override func viewDidLoad() {
        super.viewDidLoad()
        self.decodeXml()

    }
    @IBAction func decodeXml()
    {
        let url = NSURL(string: "http://test.com/videos.xml")
        // 忽略缓存数据
        let request = NSURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringCacheData, timeoutInterval: 10)
        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue()) { [weak self] (response:NSURLResponse?, data:NSData?, error:NSError?) -> Void in
            let xml = NSXMLParser(data: data!)
            xml.delegate = self
            xml.parse()
        }
    }
    // 开始解析文档
    func parserDidStartDocument(parser: NSXMLParser)
    {
        self.videos.removeAll()
    }

    // 开始节点
    func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String])
    {
        if elementName == "video"
        {
            self.videos.append(Video())
        }
        self.nodeString = ""
    }

    // 获得文本内容
    func parser(parser: NSXMLParser, foundCharacters string: String)
    {
        self.nodeString = "\(self.nodeString)\(string)"
    }
    // 结束节点
    func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?)
    {
        if elementName != "video" && elementName != "videos"
        {
            self.videos[self.videos.count - 1].setValue(self.nodeString, forKey: elementName)
        }
    }
    // 结束解析文档
    func parserDidEndDocument(parser: NSXMLParser)
    {
        self.tableView.reloadData()
        self.refreshControl?.endRefreshing()
    }
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let identifer = "xmlCell"
        var cell:UITableViewCell! = tableView.dequeueReusableCellWithIdentifier(identifer)
        if cell == nil
        {
            cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: identifer)
        }
        cell.textLabel?.text = self.videos[indexPath.row].name
        cell.detailTextLabel?.text = self.videos[indexPath.row].videoURL
        return cell
    }
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.videos.count
    }
}
class Video:NSObject {
    var name:String!
    var length:String!
    var videoURL:String!
    var imageURL:String!
    var desc:String!
    var teacher:String!
}

标签: swift, xml

添加新评论