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样本。 请检查 – 这可能是一个问题。