解析XML数据的NSMutableArray的iOS - iPhone

问题描述:

这是XML数据:解析XML数据的NSMutableArray的iOS - iPhone

<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

哪些错误在我的代码? :(

感谢

+0

只是使用JSON,开销小,代码少,分析速度快。 – 2012-03-27 06:59:56

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

下面的代码演示了XMLReader to get NSDictionary

进口XMLReader在您的文件。

#import "XMLReader.h" 

然后用下面的方法得到NSDictionary。你必须通过你的XML as 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]; 
    } 
+0

我想用所需的数据填充数组,以便我在tableview中使用它 – 2012-03-27 08:12:37

+0

我认为你可以做NSArray * arrayTemp = [dict copy];这样 – iDhaval 2012-03-27 08:29:07

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

这里我解析你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];它的工作很好尝试。

谢谢