parsingXML数据到NSMutableArray iOS – iPhone

这是XML数据:

<Categorys> <Category> <categoryId>25</categoryId> <categoryName>My Photos</categoryName> <categoryDescription>Description</categoryDescription> <categoryIconPath>7.jpg</categoryIconPath> <userId>2</userId> <categoryStatus>ON</categoryStatus> <publicPrivate>Private</publicPrivate> </Category> ......more categories <Categorys> 

在这里我想获取<categoryName>值到我的NSMutableArray categList

我使用的代码是:

 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary*)attributeDict { if ( [elementName isEqualToString:@"categList"]) { // addresses is an NSMutableArray instance variable if (!categList) categList = [[NSMutableArray alloc] init]; return; } NSLog(@"StartedElement %@", elementName); element = [NSMutableString string]; } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { if(element == nil) element = [[NSMutableString alloc] init]; [element appendString:string]; } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { NSLog(@"Found an element named: %@ with a value of: %@", elementName, element); if ([elementName isEqualToString:@"categoryName"]) { NSLog(@"\n\n\nfound::::::::::::::: %@", element); category = element; NSLog(@"category:::: %@", category); } [categList addObject:element]; NSLog(@"categList*************** %@", categList); } 

但我没有得到我的NSMutableArray categList的类别名称:

我的代码有什么问题? 🙁

谢谢

嘿你可以使用XMLReader,但它会返回NSDictionary

下面的代码演示XMLReader to get NSDictionary

在您的文件中导入XMLReader

 #import "XMLReader.h" 

然后使用下面的方法来获取NSDictionary 。 你必须把你的XML作为NSString来传递。

 NSDictionary* xmlDict = [XMLReader dictionaryForXMLString:theXML error:&er]; 

如果你想使用GDataXMLParser你可以使用下面的代码工作正常

首先尝试GDataXMLParser库文件,然后写入vbe

  -(void)XMLParsing { GdataParser *parser = [[GdataParser alloc] init]; NSString* urlString = @"YOURURL"; NSURL *url = [[NSURL alloc] initWithString:urlString]; [parser downloadAndParse:url withRootTag:@"Category" withTags:[NSDictionary dictionaryWithObjectsAndKeys:@"categoryId",@"categoryId",@"categoryName",@"categoryName",@"categoryDescription",@"categoryDescription",@"categoryIconPath",@"categoryIconPath",@"userId",@"userId",@"categoryStatus",@"categoryStatus",@"publicPrivate",@"publicPrivate",nil] sel:@selector(finishGetDataSF:) andHandler:self]; [urlSR release]; [parser release]; } -(void)getDate:(NSDictionary*)dict { NSLog(@"Data from XML file == %@",dict); NSArray* arrayTemp = [dict copy]; } 

在这里我parsing你r应用程序的工作非常好,请检查它使类别对象方向类,并使用它。

  -(void)loaddatafromxml { NSString *ur=[NSString stringWithFormat:@"Enter your url"]; NSURL *url=[NSURL URLWithString:ur]; NSMutableURLRequest *req=[NSMutableURLRequest requestWithURL:url]; conn=[[NSURLConnection alloc]initWithRequest:req delegate:self]; if(conn) webdata=[[NSMutableData data]retain]; } -(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [webdata appendData:data]; } -(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { [webdata setLength:0]; } -(void)connectionDidFinishLoading:(NSURLConnection *)connection { categaryArry=[[NSMutableArray alloc]init]; NSString *thexml=[[NSString alloc] initWithBytes:[webdata mutableBytes] length:[webdata length] encoding:NSASCIIStringEncoding]; NSArray *arr=[thexml componentsSeparatedByString:@"<Category>"]; for(int i=1;i<[arr count];i++) { categList *object = [[categList alloc] init]; NSString *str=[arr objectAtIndex:i]; NSArray *arr=[str componentsSeparatedByString:@"<categoryId>"]; NSString *data=[arr objectAtIndex:1]; NSRange ranfrom=[data rangeOfString:@"</categoryId>"]; object.catid=[data substringToIndex:ranfrom.location]; arr=[str componentsSeparatedByString:@"<categoryName>"]; data=[arr objectAtIndex:1]; ranfrom=[data rangeOfString:@"</categoryName>"]; object.catname=[data substringToIndex:ranfrom.location]; arr=[str componentsSeparatedByString:@"<categoryDescription>"]; data=[arr objectAtIndex:1]; ranfrom=[data rangeOfString:@"</categoryDescription>"]; object.catdesc=[data substringToIndex:ranfrom.location]; arr=[str componentsSeparatedByString:@"<categoryIconPath>"]; data=[arr objectAtIndex:1]; ranfrom=[data rangeOfString:@"</categoryIconPath>"]; object.caticon=[data substringToIndex:ranfrom.location]; arr=[str componentsSeparatedByString:@"<userId>"]; data=[arr objectAtIndex:1]; ranfrom=[data rangeOfString:@"</userId>"]; object.userid=[data substringToIndex:ranfrom.location]; arr=[str componentsSeparatedByString:@"<categoryStatus>"]; data=[arr objectAtIndex:1]; ranfrom=[data rangeOfString:@"</categoryStatus>"]; object.catstatus=[data substringToIndex:ranfrom.location]; arr=[str componentsSeparatedByString:@"<publicPrivate>"]; data=[arr objectAtIndex:1]; ranfrom=[data rangeOfString:@"</publicPrivate>"]; object.publicpriv=[data substringToIndex:ranfrom.location]; [categaryArry addObject:object]; } [self.table_data reloadData]; [thexml release]; [connection release]; } 

并调用loaddatafrm xml函数为[self loaddatafromxml]; 它的工作很好尝试。

谢谢

您使用if ( [elementName isEqualToString:@"categList"])...但我无法findcategList名称在你的XML样本。 请检查 – 这可能是一个问题。