使用NSXML解析器解析到相同的根元素

使用NSXML解析器解析到相同的根元素

问题描述:

<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。但是,根是以News开始,其他的元素也以News开始。
这是我曾尝试(没有成功)使用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的?

你可以检查的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

您可以使用这些属性来区分它们。

试试这个代码:

-(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"]; 
    } 
}