2014-09-03 2 views
0

지금은 뉴스 피드를 읽을 수있는 간단한 앱을 디자인하고 있습니다. 내가 사용하고있는 XML 피드는 ... http://feeds.foxnews.com/foxnews/world?format=xml입니다.TableView 용 XML 요소 구문 분석

내가하고 싶은 것은 기본적으로 'title'요소와 description 요소를이 페이지에서 가져 와서 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를 볼 수 없다. –

+0

죄송합니다, 예. 이 후 각 항목을 사전에 추가하려고합니다. (그래도 필요하다면 확실하지 않습니다.) – TinMan7757

답변

0

NSDictionary을 사용하여 각 항목에 대한 제목과 설명을 함께 저장하고 에 사전을 추가 할 수 있습니다.

- (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

+0

피드가 맞다면 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 –