在Swift中,我从vimeo频道解析XML,我有:https://vimeo.com/channels/1000464/videos/rss
我成功地提取了链接,发布日期和视频标题。但是,我想提取缩略图,这是" media:thumbnail"的网址属性。值。由于此值具有缩略图高度,缩略图宽度和缩略图网址的多个属性,因此我不确定如何枚举此值。
以下代码执行解析Feed以提取视频链接和视频标题的实际工作:
class VimeoFeedViewController: UIViewController, NSXMLParserDelegate, UITableViewDataSource, UIWebViewDelegate, UITableViewDelegate
{
@IBOutlet var tbData: UITableView?
var parser = NSXMLParser()
var posts = NSMutableArray()
var elements = NSMutableDictionary()
var element = NSString()
var title1 = NSMutableString()
var date = NSMutableString()
var link = NSMutableString()
var webView = UIWebView()
var boxView = UIView()
var selectedCell = NSIndexPath()
var valueToPass:String!
var viewToPass: UIView!
var customWebView = UIWebView()
var url = NSURL()
//custom code for webviews to show up
var postTitle: String = String()
var postLink: String = String()
var ename: String = String()
//end of custom code for webviews to show up
override func viewDidLoad() {
super.viewDidLoad()
self.beginParsing()
self.tbData?.backgroundColor = UIColor(patternImage: UIImage(named: "home-page-background.png")!)
webView.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func beginParsing()
{
posts = []
parser = NSXMLParser(contentsOfURL:(NSURL(string:"https://vimeo.com/channels/1000464/videos/rss"))!)!
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 = ""
link = NSMutableString()
link = ""
postTitle = String()
postLink = String()
}
}
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")
}
if !link.isEqual(nil) {
elements.setObject(link, forKey: "link")
}
posts.addObject(elements)
}
}
func parser(parser: NSXMLParser, foundCharacters string: String)
{
if element.isEqualToString("title") {
title1.appendString(string)
}
if element.isEqualToString("pubDate") {
date.appendString(string)
}
if element.isEqualToString("link") {
link.appendString(string)
}
}
我也可以发布XML Feed中显示的代码,但内容可能相当冗长。所需的缩略图值位于" media:thumbnail" XML的属性。
提前感谢您提供有关如何枚举包含多个属性的xml值的任何帮助。
答案 0 :(得分:2)
您应该比较解析器中的元素名称:didStartElement:qualifiedName:attributes:并从中提取属性以获取url。它应该是这样的。属性dict包含该元素中的所有属性。
例如,查看此特定元素
<media:thumbnail height="540" width="960" url="https://i.vimeocdn.com/video/611645334_960.webp"/>
如果您为此读取属性dict,它应该是这样的,
["height": "540", "url": "https://i.vimeocdn.com/video/611645334_960.webp", "width": "960"]
以下是提取所需网址的代码,
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
if elementName == "media:thumbnail" {
if let url = attributeDict["url"] {
print(url)
}
}
}