如何在iPhone中3个不同的数组中存储3表parsing值

我是新来的iPhone编程,我使用NSXmlParser来parsing数据,并将其存储在一个数组,但我有3个表数据我想存储在3个不同的数组,可以有人告诉我如何parsing数据并将其存储在3个不同的arrays。

我的xml看起来像这样

<Result> <Table diffgr:id="Table1" msdata:rowOrder="0"> <CreatedBy>1</CreatedBy> <Email>YOURMAIL1@CAFE.COM</Email> <SalesAmount>0.0000</SalesAmount> <PurchasesAmount>0.0000</PurchasesAmount> </Table> <Table diffgr:id="Table2" msdata:rowOrder="0"> <CreatedBy>2</CreatedBy> <Email>YOURMAIL2@CAFE.COM</Email> <SalesAmount>0.0000</SalesAmount> <PurchasesAmount>0.0000</PurchasesAmount> </Table> <Table diffgr:id="Table3" msdata:rowOrder="0"> <CreatedBy>3</CreatedBy> <Email>YOURMAIL3@CAFE.COM</Email> <SalesAmount>0.0000</SalesAmount> <PurchasesAmount>0.0000</PurchasesAmount> </Table> </Result> 

使用下面的代码,我可以将所有parsing的数据存储在一个数组中。

 -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName attributes: (NSDictionary *)attributeDict { arr_info=[NSMutableArray arrayWithObjects:@"CreatedBy",@"Email",@"SalesAmount",@"PurchasesAmount",nil]; for (i=0; i<[arr_info count]; i++) { if( [elementName isEqualToString:[arr_info objectAtIndex:i]]) { if(!soapResults) { soapResults = [[NSMutableString alloc] init]; } xmlResults = YES; } } -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { if( xmlResults ) { [soapResults appendString: string]; NSLog(@"soap result %@",soapResults); [arr_detail addObject:soapResults]; NSLog(@"gg %@",arr_detail); } [tableView reloadData]; } -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { for (i=0; i<[arr_info count]; i++) { if( [elementName isEqualToString:[arr_info objectAtIndex:i]]) { xmlResults = FALSE; switch ([arr_detail count]) { case 1: l1.text=[arr_detail objectAtIndex:[arr_detail count]-1]; NSLog(@"%@",[arr_detail objectAtIndex:[arr_detail count]-1]); break; case 2: l2.text=[arr_detail objectAtIndex:[arr_detail count]-1]; NSLog(@"%@",[arr_detail objectAtIndex:[arr_detail count]-1]); break; case 3: l3.text=[arr_detail objectAtIndex:[arr_detail count]-1]; NSLog(@"%@",[arr_detail objectAtIndex:[arr_detail count]-1]); break; case 4: l4.text=[arr_detail objectAtIndex:[arr_detail count]-1]; NSLog(@"%@",[arr_detail objectAtIndex:[arr_detail count]-1]); break; } [tableView reloadData]; soapResults = nil; } } } 

你可以使用xmlReader,这将使它很容易处理。这里是文件

XMLReader.h和XMLReader.m

这是代码

  NSString *xmlString=@"<Result><Table diffgr:id=\"Table1\" msdata:rowOrder=\"0\"><CreatedBy>1</CreatedBy><Email>YOURMAIL1@CAFE.COM</Email><SalesAmount>0.0000</SalesAmount><PurchasesAmount>0.0000</PurchasesAmount></Table><Table diffgr:id=\"Table2\" msdata:rowOrder=\"0\"><CreatedBy>2</CreatedBy><Email>YOURMAIL2@CAFE.COM</Email><SalesAmount>0.0000</SalesAmount><PurchasesAmount>0.0000</PurchasesAmount></Table><Table diffgr:id=\"Table3\" msdata:rowOrder=\"0\"><CreatedBy>3</CreatedBy><Email>YOURMAIL3@CAFE.COM</Email><SalesAmount>0.0000</SalesAmount><PurchasesAmount>0.0000</PurchasesAmount></Table></Result>"; NSDictionary *dics=[[NSDictionary alloc]initWithDictionary:[XMLReader dictionaryForXMLString:xmlString error:nil]]; NSLog(@"dics is %@",dics); NSArray *tableDicsArray=[[dics valueForKey:@"Result"] valueForKey:@"Table"]; 

这是你的输出————

 dics is { Result = { Table = ( { CreatedBy = { text = 1; }; Email = { text = "YOURMAIL1@CAFE.COM"; }; PurchasesAmount = { text = "0.0000"; }; SalesAmount = { text = "0.0000"; }; "diffgr:id" = Table1; "msdata:rowOrder" = 0; }, { CreatedBy = { text = 2; }; Email = { text = "YOURMAIL2@CAFE.COM"; }; PurchasesAmount = { text = "0.0000"; }; SalesAmount = { text = "0.0000"; }; "diffgr:id" = Table2; "msdata:rowOrder" = 0; }, { CreatedBy = { text = 3; }; Email = { text = "YOURMAIL3@CAFE.COM"; }; PurchasesAmount = { text = "0.0000"; }; SalesAmount = { text = "0.0000"; }; "diffgr:id" = Table3; "msdata:rowOrder" = 0; } ); }; } 

如果使用ARC,不要忘记禁用弧。

在这里输入图像说明

—————使用每个表的字典.——-

  NSDictionary *tbl1= [tableDicsArray objectAtIndex:0]; NSDictionary *tbl2= [tableDicsArray objectAtIndex:1]; NSDictionary *tbl3= [tableDicsArray objectAtIndex:2]; NSArray *tbl1Keys=[[tbl1 allKeys] sortedArrayUsingSelector:@selector(compare:)]; NSArray *tbl2Keys=[[tbl2 allKeys] sortedArrayUsingSelector:@selector(compare:)]; NSArray *tbl3Keys=[[tbl3 allKeys] sortedArrayUsingSelector:@selector(compare:)]; //you can use these keys to pass no of rows in you table. //and use dictionary in cellforRow as give below:------- NSString *key=[tbl1Keys objectAtIndex:indexPath.key]; cell.textLabel.text=[tbl1 valueForKey:key]; 

您可以检查didStartElement中的属性值,并基于该值为每个属性值创build不同的数组,并将其添加到字典中,如下所示:

  MainDict:[ Arr1:{ 1, YOURMAIL1@CAFE.COM, 0.0000, 0.0000 }, Arr2: { 2, YOURMAIL2@CAFE.COM, 0.0000, 0.0000 }, so on.. ] 

或者我可以build议第二种方法,你可以使用字典找出不同的表格。 如果要区分table1,table2等中的数据,则可以使用每个字典再次表示字典的字典,例如:

 MainDict:[ table1:[ CreatedBy: 1, Email: YOURMAIL1@CAFE.COM, SalesAmount: 0.0000, PurchasesAmount: 0.0000 ], table2:[ CreatedBy: 2, Email: YOURMAIL2@CAFE.COM, SalesAmount: 0.0000, PurchasesAmount: 0.0000 ], . . . ] 

这样你可以区分每个字典和每个标签的值。即使你可以在tableview中使用这个字典。