//
// 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!
}