2012-03-27 4 views
4

이 XML 데이터입니다 : 여기 내 NSMutableArray categList<categoryName> 값을 얻으려면구문 분석 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> 

.

내가 사용한 코드는 다음과 같습니다

- (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, 작은 오버 헤드, 적은 코드, 빠른 방법은 구문 분석을 사용합니다. –

답변

7

이봐, 당신은 사용할 수 있습니다 XMLReader하지만 돌아갑니다 NSDictionary.

XMLReader to get NSDictionary 다음 코드 데모.

수입 XMLReader 파일입니다.

#import "XMLReader.h" 

다음 방법을 사용하여 NSDictionary을 얻으십시오 .은 NSString 입니다.

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

당신이

먼저 부과금 GDataXMLParser 라이브러리 파일은 다음 if ([elementName isEqualToString:@"categList"])... 사용 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에서 사용할 수 있도록하려고합니다. –

+0

NSArray * arrayTemp = [dict copy]; 이것에 의해서 – iDhaval

1

쓰기 당신이 잘 작동 코드를 사용할 수 있습니다 GDataXMLParser을 사용하고 싶지만 경우 내가 찾을 수 없습니다 categList XML 샘플 이름. 확인해주세요. 문제가 될 수 있습니다.

2

여기에 내가 당신의 응용 프로그램을 작동 파서 매우 정밀한 pls 그것이 카테고리 객체 지향 클래스를 확인하고 그것을 사용 확인하십시오.

-(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]로 호출하십시오. 그것의 노력 좋은 그것을 시도하십시오.

감사