2013-06-12 1 views
2
<News TotalRecords="10"> 
<News ID="381222" DateTime="2013-06-12T00:05:00" Title="abc" HeadlineImgSrc="http://www.msa.net/common/news/images/381222/headline.jpg"/> 
<News ID="381192" DateTime="2013-06-11T16:46:00" Title="asdsad" HeadlineImgSrc="http://www.asdsad.net/common/news/images/381192/headline.jpg"/> 
<News ID="381085" DateTime="2013-06-11T11:34:00" Title="sdsadsadsadsad" HeadlineImgSrc="http://www.asdsad.net/common/news/images/381085/headline.jpg"/> 
<News ID="381042" DateTime="2013-06-11T09:16:00" Title="asdsad" HeadlineImgSrc="http://www.asdsad.net/common/news/images/381042/headline.jpg"/> 
<News ID="380972" DateTime="2013-06-11T00:01:00" Title="asdsad" HeadlineImgSrc="http://www.asdsad.net/common/news/images/380972/headline.jpg"/> 
<News ID="380908" DateTime="2013-06-10T16:23:00" Title="asdsad" HeadlineImgSrc="http://www.asdsad.net/common/news/images/380908/headline.jpg"/> 
</News> 

이 XML을 구문 분석하려고합니다. 그러나 뉴스와 함께 루트 이름 시작, 다른 요소도 뉴스로 시작합니다.
이것은 내가동일한 루트 요소에 NSXML 파서로 구문 분석

-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 

    if ([elementName isEqualToString:@"News"]) { 
     app.listArray = [[NSMutableArray alloc] init];   
    } else if([elementName isEqualToString:@"News"]){ 

     theList = [[List alloc] init]; 

     theList.ThumbImageURL = [attributeDict objectForKey:@"HeadlineImgSrc"]; 
     theList.Title = [attributeDict objectForKey:@"Title"]; 
     theList.URL = [attributeDict objectForKey:@"DateTime"]; 
    } 
} 

은 어떻게 NSXMLParser를 사용하여 XML의 유형을 분석 할 수 있습니다 (성공없이) 시도 무엇인가?

답변

1

당신은 TotalRecords의 존재 여부를 확인할 수 있습니다 : 그것은 다른 목적을 위해 같은 요소 이름을 사용하는 가난한 디자인의로 솔직히

-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 

    if ([elementName isEqualToString:@"News"]) 
    { 
     NSString *totalRecords = attributeDict[@"TotalRecords"]; 

     if (totalRecords) 
     { 
      app.listArray = [[NSMutableArray alloc] init]; 
     } 
     else 
     { 
      theList = [[List alloc] init]; 

      theList.ThumbImageURL = [attributeDict objectForKey:@"HeadlineImgSrc"]; 
      theList.Title = [attributeDict objectForKey:@"Title"]; 
      theList.URL = [attributeDict objectForKey:@"DateTime"]; 

      [app.listArray addObject:theList]; 
     } 
    } 
} 

, 나는 오히려 당신이 XML 소스를 수정보고 싶지만 경우 당신은 기존 XML 구조를 고수해야한다.

+1

:

이 코드를 사용해보십시오. 정말 고마워. – SukruK

1

속성을 사용하여 구분할 수 있습니다. 그것은 작동

-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 

    if ([attributeDict objectForKey:@"TotalRecords"]) 
    { 
     app.listArray = [[NSMutableArray alloc] init]; 
    } 
    else if([attributeDict objectForKey:@"ID"]) 
    { 

     theList = [[List alloc] init]; 

     theList.ThumbImageURL = [attributeDict objectForKey:@"HeadlineImgSrc"]; 
     theList.Title = [attributeDict objectForKey:@"Title"]; 
     theList.URL = [attributeDict objectForKey:@"DateTime"]; 
    } 
}