在 Swift 中,我正在从我拥有的 vimeo channel 解析 XML:https://vimeo.com/channels/1000464/videos/rss
我成功提取了链接、发布日期和视频标题。不过,我想提取缩略图,它是“media:thumbnail”值的 url 属性。由于此值具有缩略图高度、缩略图宽度和缩略图 url 的多个属性,因此我不确定如何枚举此值。
以下代码执行解析提要以提取视频链接和视频标题的实际工作:
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 提要中显示的代码,但内容可能相当冗长。所需的缩略图值位于 XML 的“media:thumbnail”属性中。
预先感谢您提供有关如何枚举包含多个属性的 xml 值的任何帮助。
最佳答案
您应该比较 parser:didStartElement:qualifiedName:attributes: 中的元素名称并从中提取属性以获取 url。应该是这样的。属性字典包含该元素中的所有属性。
例如看看这个特定的元素,
<media:thumbnail height="540" width="960" url="https://i.vimeocdn.com/video/611645334_960.webp"/>
如果你阅读属性字典,它应该是这样的,
["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)
}
}
}
关于ios - 在 Swift 中解析 XML 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41785879/