如何在swift中解析整个rss feed xml数据

时间:2016-02-04 06:52:47

标签: ios xml swift parsing rss

我是swift编程的新手.. 我想在swift中解析xml数据。

这是我的xml数据..

  <rss version="2.0">
     <channel>
     <title>Zee News :India National</title>
     <link>
     <![CDATA[ http://zeenews.india.com ]]>
     </link>
    <description>
    <![CDATA[
        Visit Zee News for latest India news, get latest news from India and        all over the world. We provide you latest celebrity news, latest bollywood news and entertainment news with fastest top stories online about cricket, sports, business, bollywood, entertainment, lifestyle, world and science to get yourself updated.
    ]]>
    </description>
    <language>en-us</language>
    <copyright>Zee News Ltd</copyright>
    <category>India National News</category>
   <pubDate>
   <![CDATA[ 2/04/2016 11:16:57 AM GMT ]]>
   </pubDate>
   <image>
   <url>
   <![CDATA[
http://znn.india.com/images/logo-zeenews-aab-nw.jpg
]]>
   </url>
   <title>
   <![CDATA[ Zee News ]]>
   </title>
   <link>
   <![CDATA[ http://zeenews.india.com ]]>
   </link>
   </image>
   <item>
   <title>
Son of retired Major General arrested in Goa for suspected `terror links`
   </title>
   <link>
   <![CDATA[
http://zeenews.india.com/news/india/son-of-retired-major-general-arrested-in-goa-for-suspected-terror-links_1852160.html
]]>
   </link>
   <description>
Samir Sardana was picked up from Vasco railway station after he was found "wandering suspiciously".
   </description>
<comments>mailto:inewsonline@gmail.com</comments>
<pubdate>Thursday, February 04, 2016, 10:13 GMT +5:30</pubdate>
   <author/>
<guid isPermaLink="false">
   <![CDATA[
http://zeenews.india.com/news/india/son-of-retired-major-general-arrested-in-goa-for-suspected-terror-links_1852160.html
]]>
   </guid>
   </item>

我试图解析但只有&#34; item&#34;数据不能解析&#34;标题&#34; &安培; &#34;图像&#34;

这是我的代码......

     var parser = NSXMLParser()
    var posts = NSMutableArray()

    var elements = NSMutableDictionary()

    var element = NSString()
    var title1 = NSMutableString()
    var title3 = NSMutableString()
    var date = NSMutableString()
    var link = NSMutableString()
func beginParsing()
    {

        posts = []
        parser = NSXMLParser(contentsOfURL:(NSURL(string:"http://zeenews.india.com/rss/india-national-news.xml"))!)!
        parser.delegate = self
        parser.parse()

        tbData!.reloadData()
    }
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?,attributes attributeDict:[NSObject :AnyObject])
    {
if (elementName as NSString).isEqualToString("title")
        {
        elements = NSMutableDictionary.alloc()
            title3 = NSMutableString()
            title3 = ""
         }

      if (elementName as NSString).isEqualToString("item")
        {
            elements = NSMutableDictionary.alloc()
            elements = [:]
            title1 = NSMutableString()
            title1 = ""
            date = NSMutableString()
            date = ""
            link = NSMutableString()
            link = ""
        }
    }

    func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?)
    {
if (elementName as NSString).isEqualToString("title")
        {
            if !title3.isEqual(nil) {
               elements.setObject(title3, forKey: "title")
                //posts.addObject(elements)

       }

       }

      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)
        }
        //posts.addObject(elements)
        //posts.addObject(post)
    }

    func parser(parser: NSXMLParser, foundCharacters string: String?)
    {
        if element.isEqualToString("title")
       {
       title3.appendString(string!)
       }


       if element.isEqualToString("title") {
            title1.appendString(string!)
        }
         if element.isEqualToString("link"){
                link.appendString(string!)
        }

         if element.isEqualToString("pubDate") {
            date.appendString(string!)
        }
    }

Plz ...建议我如何解析整个RSS源数据......

1 个答案:

答案 0 :(得分:1)

我现在纯粹猜测。

你说item解析得很好,而titleimage却没解析。

查看XML似乎image仅包含CDATA元素

<image>
   <url>
     <![CDATA[http://znn.india.com/images/logo-zeenews-aab-nw.jpg]]>
   </url>
   <title>
     <![CDATA[ Zee News ]]>
   </title>
   <link>
     <![CDATA[ http://zeenews.india.com ]]>
   </link>
</image>

我在Stack Overflow上找到了this post,其中有人询问如何处理XML中的CDATA。事实证明NSXMLParserDelegate有一个名为的可选方法:

parser(_ parser: NSXMLParser, foundCDATA CDATABlock: NSData)

您可以在Apples documentation

阅读此处

也许这可以帮到你?