2013-10-04 3 views
1

트리 비아 태그 사이에있는 요소 만 구문 분석해야합니다. SAndWin 사이에 요소가 필요 없습니다. 어떤 도움을 주셔서 감사합니다. 미리 감사드립니다. 난 단지 하찮은 태그에서 점수, 사용자 이름을 구문 분석하는 데 필요한 아래 샘플 형식에서 NSXMLParser를 사용하여 특정 태그 내에서만 요소를 구문 분석하십시오.

샘플 XML 형식 :

<Top10Score> 
<SAndWin> 
    <Member> 
    <SCORE>278</SCORE> 
    <MEM_ID>10</MEM_ID> 
    <EMAIL>[email protected]</EMAIL> 
    <USERNAME>prabu govind</USERNAME> 
    </Member> 
    <Member> 
    <SCORE>278</SCORE> 
    <MEM_ID>10</MEM_ID> 
    <EMAIL>[email protected]</EMAIL> 
    <USERNAME>prabu govind</USERNAME> 
    </Member> 
    <Member> 
    <SCORE>278</SCORE> 
    <MEM_ID>10</MEM_ID> 
    <EMAIL>[email protected]</EMAIL> 
    <USERNAME>Name1</USERNAME> 
    </Member> </SAndWin> 
    <Member> 
    <SCORE>278</SCORE> 
    <MEM_ID>10</MEM_ID> 
    <EMAIL>[email protected]</EMAIL> 
    <USERNAME>Name2</USERNAME> 
    </Member> 
    <Member> 
    <SCORE>278</SCORE> 
    <MEM_ID>10</MEM_ID> 
    <EMAIL>[email protected]</EMAIL> 
    <USERNAME>Name3</USERNAME> 
    </Member> 
<Trivia> 
    <Member> 
    <SCORE>278</SCORE> 
    <MEM_ID>44</MEM_ID> 
    <EMAIL>[email protected]</EMAIL> 
    <USERNAME>prabu govind</USERNAME> 
    </Member> 
    <Member> 
    <SCORE>278</SCORE> 
    <MEM_ID>48</MEM_ID> 
    <EMAIL>[email protected]</EMAIL> 
    <USERNAME>prabu govind</USERNAME> 
    </Member> 
    <Member> 
    <SCORE>278</SCORE> 
    <MEM_ID>22</MEM_ID> 
    <EMAIL>[email protected]</EMAIL> 
    <USERNAME>Name8</USERNAME> 
    </Member> </SAndWin> 
    <Member> 
    <SCORE>278</SCORE> 
    <MEM_ID>19</MEM_ID> 
    <EMAIL>[email protected]</EMAIL> 
    <USERNAME>Name6</USERNAME> 
    </Member> 
    <Member> 
    <SCORE>278</SCORE> 
    <MEM_ID>12</MEM_ID> 
    <EMAIL>[email protected]</EMAIL> 
    <USERNAME>Name4</USERNAME> 
    </Member> 
</Trivia> 
</Top10Score> 

답변

1

NSXMLParserSAX 파서입니다 -

당신은 .H 파일에

-(void)requestXMLParsing 
    { 

     NSURL *url = [NSURL URLWithString:URL]; 
     xmlParser = [[NSXMLParser alloc]initWithContentsOfURL:url]; 
     xmlParser.delegate = self; 
     BOOL success = [xmlParser parse]; 
     if (!success) { 

     } else { 

     } 
    } 

의 #pragma 마크를 XmlParser가, AR1, dic1 및 curElement를 선언해야합니다. 따라서 요구 사항을 구현하기가 매우 어렵습니다 (플래그가 필요하지 않음).

처럼 당신은 할 수 있습니다 :

같은 당신의 .h 파일에 BOOL를 선언 :

BOOL 플래그;

및 구현 구문 분석 방법과 같은 :GData XMLParser처럼

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    flag = false; 
    if ([elementName isEqualToString:@"Trivia"]) 
    { 
     flag = true; 
    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if ([elementName isEqualToString:@"Member"] && flag) 
    { 
     //read the value here 
    } 
} 

그것이 DOM 파서를 사용하는 것이 좋습니다 유사한 작업을 수행하기위한

당신이 만약 (I는이 요구 사항에 대한 DOM 파서를 추천) 다음과 같이 할 수있는 GDataXML 파서를 사용하고 있습니다.

- (void)parseMyXML:(NSString *)xml 
{ 
     GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:[xml dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&error]; 
    if (doc == nil) { return nil; } 

    NSArray *members = [doc nodesForXPath:@"//Top10Score/Trivia" error:nil]; 
    for (GDataXMLElement *member in members) 
    { 
     int count = 0; 
     NSArray *names = [member elementsForName:@"Member"]; 
     while (names.count >count) 
     { 
      GDataXMLElement *firstName = (GDataXMLElement *) [names objectAtIndex:0]; 
      NSLog(@"Value : %@",[[names objectAtIndex:0] stringValue]); 
      //store data here 
      count++; 
     } 
    } 
} 
+0

나는 태그를 사용하고 그것은 잘 작동 .. 답변 주셔서 감사합니다. – Gowtham

+0

@Gowtham : 즐거움과 함께 :) –

0

당신은 당신이 하찮은 태그를 발견에만 때마다 배열을 초기화 할 필요가있다. 멤버 태그를 끝낸 후에 배열에 요소를 추가하십시오. NSXMLParser 위임

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if ([elementName isEqualToString:@"Trivia"]) { 
     ar1 = [[NSMutableArray alloc]init]; 
    } else if ([elementName isEqualToString:@"Member"]) { 
     dic1 = [[NSMutableDictionary alloc]init]; 
    } 

} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    curElement = string; 

} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if ([elementName isEqualToString:@"Member"]) { 
     [ar1 addObject:dic1]; 
    } else if ([elementName isEqualToString:@"Trivia"]) { 
     NSLog(@"%@",ar1); 
    } else { 
     [dic1 setObject:curElement forKey:elementName]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError 
{ 

} 
+0

구성원 요소에 하위 태그가 있습니다. 내가 그 태그를 구문 분석해야합니다 .. 더 당신은 더 제안 할 수 있습니까 – Gowtham

+0

@ Gowtham : pls 편집 된 내 대답을 참조하십시오 – manujmv