2013-12-19 2 views
0

Objective C 및 스택 오버플로가 매우 새롭습니다. 온라인 XML 문서를 구문 분석하려고합니다. 피드는 5 개 항목을 가지고 있으며, 그들 각각은 다음과 같습니다NSXMLParser는 피드의 마지막 개체 만 가져옵니다.

<item> 
<title>the title goes here</title> 
<link>http://thelink.com</link> 
<guid>http://thelink.com</guid> 
<category>News</category> 
<description/> 
<pubDate>Wed, 20 Nov 2013 20:36:00 +0430</pubDate> 
<author>newsFeedAsc</author> 
</item> 

최상위 노드는 다음과 같습니다 이제 때 NSLog

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSString *[email protected]"http://thelink.thelink/api/news?news_type=2&limit=5"; 
    NSURL *url = [NSURL URLWithString:urlString]; 
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url]; 
    [parser setDelegate:self]; 
    [parser setShouldResolveExternalEntities:NO]; 
    [parser parse]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    element = elementName; 
    if ([element isEqualToString:@"item"]) 
    { 
     item = [[NSMutableDictionary alloc] init]; 
     title = [[NSMutableString alloc] init]; 
     link = [[NSMutableString alloc] init]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if ([element isEqualToString:@"title"]) { 
     [title appendString:string]; 
    } else if ([element isEqualToString:@"link"]) { 
     [link appendString:string]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if ([elementName isEqualToString:@"item"]) { 
     [item setObject:title forKey:@"title"]; 
     [item setObject:link forKey:@"link"]; 
     [feeds addObject:[item copy]]; 
    } 
} 
- (void)parserDidEndDocument:(NSXMLParser *)parser 
{ 
    NSLog(@"%@",feeds); 
} 

: 나는 다음과 같은 코드를 사용

<rss version="2.0"> 
<channel> 
<title>feed RSS</title> 
<link>Feedlink.com</link> 
<description>...</description> 
<language>fa-ir</language> 
<pubDate/> 
<lastBuildDate/> 
<docs>......</docs> 
<generator>.....</generator> 
<ttl>5</ttl> 
<image> 
<title>RSS</title> 
<url> 
......images/ver2/rsslogo.gif 
</url> 
<link>.......</link> 
</image> 

"피드"내가 null 개체를 얻을. 그리고 언제 NSLog "항목"내가 피드의 마지막 항목을 얻을. 내가 틀리지 않다면 XML 트리 전체가 "피드"에 있어야합니다.

+0

최상위 노드 란 무엇입니까? – vikingosegundo

+0

@vikingosegundo 방금 답변의 최상위 노드를 추가했습니다. – devdev101

답변

2

인스턴스를 만들고이를 feeds에 할당 한 것처럼 보이므로 아무 것도 추가되지 않습니다. 따라서 각 item을 추가하려고하면 실제로는 그냥 던져 버릴 수 있습니다 (효과적으로 item에 대한 새 인스턴스를 만들 때만). 그래서 당신은 마지막 항목 만 가지고있는 것입니다.

기본적으로 feeds 배열을 만들어 결과를 저장할 수 있도록하십시오.

+0

감사합니다. 그것은 실제로 효과가 있었다! 나는 xcode에 아주 새로운 Im이다. 나는 충분한 점수가 있다면 나는 투표 할 것입니다. – devdev101

+1

참고로, Xcode는 객체 지향의 인스턴스를 이해하는 객체는 아닙니다. 인스턴스를 사용하려면 먼저 인스턴스를 만들어야합니다. 코드가 연결된 인스턴스가없는 정의 된 이름을 사용하려고했습니다. – Wain