ios - 在 Swift 中解析 XML 属性

标签 ios swift xml-parsing

在 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/

相关文章:

swift - Xcode 10 错误 : linker command failed with exit code 1

ios - 如何使用 Xcode 将 Logo 置于 SideMenu 的中心

javascript - 如何在 javascript Nashorn 引擎中解析 XML?

c# - XElement.Value 正在从内容中剥离 XML 标签

Swift XMLParser//根据元素&属性选择节点

ios - 如何根据变量更改 SWIFT 中的图像,单击使用 IF 语句的按钮

ios - 给MKMapView添加注解时出现EXC_BAD_ACCESS错误

ios - 使 tableview 单元格以 textView 文本大小扩展

arrays - 在 Swift 中声明任何类型的数组时使用未声明的类型 'T'

ios - 无法将 CAGradientLayer 应用为 UITableView 背景 View