使用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结构,就像上面的那样可以处理它。
答
您可以使用这些属性来区分它们。
试试这个代码:
-(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"];
}
}
它的工作原理。非常感谢。 – SukruK