2012-03-27 26 views
4

這是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

回答

7

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

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

進口XMLReader在您的文件。

#import "XMLReader.h" 

然後用下面的方法得到NSDictionary。你必須通過你的XML as NSString

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

如果你想使用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

1

您使用if ([elementName isEqualToString:@"categList"])...,但我無法找到categList名稱在你的XML樣本。請檢查 - 這可能是一個問題。

2

這裏我解析你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];它的工作很好嘗試。

謝謝