2014-09-03 165 views
0

目前我正在設計一個將讀取新聞提要的簡單應用程序。我正在使用的XML Feed是... http://feeds.foxnews.com/foxnews/world?format=xml解析TableView的XML元素

我期待做的事情實質上是從此頁面的'標題'元素和說明'元素,並在TableView中使用它們。

這是我目前有:

-(void)parserDidStartDocument:(NSXMLParser *)parser{ 
    _elementsArray = [[NSMutableArray alloc]init]; 
} 

-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString *)string{ 
    if (!_currentString) { 
     _currentString = [[NSMutableString alloc]init]; 
    } 
    [_currentString appendString:string]; 
} 

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString  *)namespaceURI qualifiedName:(NSString *)qName{ 

    if ([elementName isEqualToString:@"title"]) { 
     [_elementsArray addObject:_currentString]; 
     _currentString=nil; 
     return; 

    } 
    if ([elementName isEqualToString:@"description"]) { 
     [_elementsArray addObject:_currentString]; 
     _currentString=nil; 
     return; 
    } 
    _currentString = nil; 
} 

-(void)parserDidEndDocument:(NSXMLParser *)parser{ 
    for (NSString*string in _elementsArray) { 
     NSLog(@"%@",string); 
    } 
    _elementsArray = nil; 
} 

我得到的這樣的輸出,這是沒有問題的。

我的問題是,每個元素都添加到一個新的NSArray條目中。我將如何將兩個元素添加到一個條目? (是否可以使用密鑰?)

+0

你的意思是新的'NSArray'條目嗎?我在代碼中看不到'NSDictionary'。 – 2014-09-03 10:27:37

+0

對不起,是的。在此之後,我將嘗試將每個條目添加到字典中(我不確定是否需要) – TinMan7757 2014-09-03 10:39:09

回答

0

您可以使用臨時NSDictionary將標題和說明一起存儲爲每個項目,並將字典添加到_elementsArray

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 
    if ([elementName isEqualToString:@"item"]) { 
     _currentDict = [NSMutableDictionary dictionary]; 
     return; 
    } 
} 

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString  *)namespaceURI qualifiedName:(NSString *)qName{ 
    if ([elementName isEqualToString:@"item"]) { 
     [_elementsArray addObject:_currentDict]; 
     _currentDict=nil; 
     return; 
    } 
    if ([elementName isEqualToString:@"title"]) { 
     _currentDict[@"title"] = _currentString; 
     _currentString=nil; 
     return; 

    } 
    if ([elementName isEqualToString:@"description"]) { 
     _currentDict[@"description"] = _currentString; 
     _currentString=nil; 
     return; 
    } 
    _currentString = nil; 
} 

// Other methods left unchanged 

這應該輸出類似:

NSArray (
    NSDictionary { 
     @"title": @"First title", 
     @"description": @"A news article" 
    }, 
    NSDictionary { 
     @"title": @"Second title", 
     @"description": @"Another interesting article" 
    } 
) 

未經檢驗的,但我希望你的想法。

還要注意,將XML(或RSS)文件解析爲本地ObjC對象是一個非常反覆出現的問題,並且大量的開源庫已經爲您完成了大部分繁重的工作。

+0

好的,非常感謝,請問您會爲此功能推薦任何第三方庫嗎? – TinMan7757 2014-09-03 11:36:17

+0

如果您的Feed真實RSS:http://cocoapods.wantedly.com/?utf8=%E2%9C%93&o=popularity&q=rss else http://cocoapods.wantedly.com/?utf8=%E2%9C% 93 O =普及&q = XML – 2014-09-03 12:41:58