2011-06-13 3 views
0

나는 나의 nsxmlparser 잘 뉴스 피드를 구문 분석이 : 그러나NSXMLParser 구문 분석 RSS는

http://www.skysports.com/rss/0,20514,12433,00.xml

를 내가는 각 항목의 출력을받을 있지만, 내 사용자 지정 개체로 저장 할 때 xml은 마지막으로 발생하는 레코드 하나만 저장합니다.

내 코드를 참조하십시오 :

-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if ([elementName isEqualToString:@"rss"]) { 
     currentNews = [[NewsParse alloc] init]; 
    } 
} 

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



    if ([elementName isEqualToString:@"description"]) { 
     currentNews.newsTitle = currentNodeContent; 
     NSLog(@"description = %@",currentNodeContent); 
    } 



    if([elementName isEqualToString:@"rss"]) 
    { 
     [news addObject:currentNews]; 
     [currentNews release]; 
     currentNews = nil; 
     [currentNodeContent release]; 
     currentNodeContent = nil; 
    } 

} 

이 방법은 트위터 피드와 함께 잘 작동하지만, XML이 다르게 나는 그것이 동작하지 않습니다 형성되기 때문에 지금은 있으리라 믿고있어.

나는 여전히 어떤 도움이 RSS를 보면 :

+0

'[NewsParse alloc]'에'init' 이 누락 된 이유가 있습니까? – Regexident

+0

죄송합니다. 나는 그것을 놓쳤습니다. 걱정하지 않아도된다. – MrPink

+0

'init'이 아마도 비어 있기 때문이다. 대답을 오도하지 않도록 질문에서 정정해야합니다. – Regexident

답변

0

멋진 당신이 시작하고 개체를 종료 잘못된 태그를 찾고있는 것으로 보인다 먹일 NSXMLParser를 사용하는 아주 새로운 해요. 당신은 두 곳에서

[elementName isEqualToString:@"item"] 

[elementName isEqualToString:@"rss"] 

를 교체해야합니다. 지금은 페이지 전체를 1 개체로보고 있습니다. 각 "항목"(<item> </item>)을 개체로 볼 필요가 있습니다. 마지막 개체를 성공적으로 저장하는 이유는 항목을 실행할 때마다 각 "설명"을 바꾸기 때문입니다. 실제로 저장하기 전에 문자열을 계속해서 여러 번 바꾸고 있습니다. 마지막 객체는 저장하기 전에 바뀌지 않고 저장 한 것으로 보이는 유일한 객체입니다.

0

흠, currentNews.newsTitle은 매번 변경되고 닫는 rss 태그를 읽으면 마지막 피드의 값을가집니다. 귀하의 currentNews는 어떤 유형의 객체입니까? 모든 다른 제목을 유지하려면 배열과 같은 여러 값을 포함하는 일종의 객체에 추가해야합니다. description의 닫는 태그를 발견하면 currentNodeContent의 문자열을 뉴스의 개별 인스턴스로 복사하기 만하면됩니다.

사실 더 많은 요소가있는 경우를 대비하여 모든 comparisson 외부의 didEndElement 태그에 currentNews 인스턴스를 실제로 할당합니다. 아마 이런 그 닫는 태그 :

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
    if ([elementName isEqualToString:@"title"]) { 
     self.currentNews.newsTitle = [[NSString alloc] initWithString:currentNodeContent]; 
    } 
    if ([elementName isEqualToString:@"description"]) { 
     self.currentNews.newsDescription = [[NSString alloc] initWithString:currentNodeContent]; 
    } 
    if ([elementName isEqqualToString:@"link"]) { 
     self.currentNews.newsLink = [[NSString alloc] initWithString:currentNodeContent]; 
    } 
    if ([elementName isEqualToString:@"guid"]) { 
     self.currentNews.newsGuid = [[NSString alloc] initWithString:currentNodeContent]; 
    } 
    if ([elementName isEqualToString:@"pubDate"]) { 
     self.currentNews.newsPubDate = "probably a date formatter here"; 
    } 
    if ([elementName isEqualToString:@"cathegory"]) { 
     self.currentNews.newsCathegory = [[NSString alloc] initWithString:currentNodeContent]; 
    } 
    blah... 
    blah... 
    if ([elementName isEqualToString:@"item"]) { 

     [news addObject:currentNews]; 

     [self.currentNews.newsTitle release]; 
     [self.currentNews.newsDescription release]; 
     [self.currentNews.newsLink release]; 
     [self.currentNews.newsGuid release]; 
     blah... 
     blah... 
     blah... 
    } 
} 

그리고 당신의 currentNews이 init 메소드 (당신의 didStartElement에서 제거) 및 할당 해제의 방법으로 그것을 풀어에서 개체를 할당합니다. 오, 그리고 @ 루위 맞아, 당신은 분명히 여러 currentNews이 배열 개체로 뉴스를보아야 만,이 currentNews 또는 항목 파서가 우려 해야하는 것입니다. "하나의 항목"에있는 모든 요소를 ​​구문 분석 한 후에는 해당 "하나의 항목"에 대한 마지막 요소 태그를 읽을 때 뉴스 배열에 추가합니다. 그러면 파서가 루프를 돌리고 다음 항목을 찾습니다.