2016-02-04 143 views
3

整個RSS提要的XML數據我迅速的編程是新.. 我想在迅速解析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:[email protected]</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> 

我試圖解析,但只有「項」數據可以解析不是「標題」 &「圖像」

這裏是我的代碼...

 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 feed數據...

+0

可能的重複[如何使用Swift製作RSS閱讀器](http://stackoverflow.com/questions/24468338/how-do-you-make-a-rss-reader-using-swift) – Abhijeet

+0

There很少有解析XML數據的github項目。 1. [鏈接](https://github.com/wantedly/swift-rss-sample) 2. [鏈接](https://github.com/tibo/SwiftRSS) – Abhijeet

回答

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> 

我發現這裏this post Stack Overflow上如果有人詢問如何在XML處理CDATA。事實證明,NSXMLParserDelegate有一個名爲可選方法:

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

您可以在Apples documentation

這裏讀到它或許可以幫助你嗎?

+0

謝謝你..爲此。 ..我會嘗試這...但我想解析標題也...當我試圖解析標題和運行時,我的調試器檢查「func解析器(解析器:NSXMLParser,foundCharacters字符串:字符串?)「,這是標題裏面的通道和標題內的項目,然後錯誤會來....它不解析和存儲在數組中.. – Ruhi

+0

** NSXMLParser **和** NSXMLParserDelegate **有已被重命名爲** XMLParser **&** XMLParserDelegate **。 –