2012-09-13 2 views
0

에서 나는 NSXmlParser를 사용하여이 XML 파일을 구문 분석하려고 해요 :구문 분석 XML은 위키 백과

<api> 
<query> 
<normalized> 
<n from="new york" to="New york"/> 
</normalized> 
<redirects> 
<r from="New york" to="New York"/> 
</redirects> 
<pages> 
<page pageid="8210131" ns="0" title="New York"> 
<extract xml:space="preserve">&lt;p>&lt;b>New York&lt; ... 

는 기본적으로이 파일이 꽤 긴하지만 난 단지 <extract> 요소를 복사하려합니다. 이 코드로 NSMutableString로 몇 가지 방법으로이를 수행 한

:

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    CrrentString = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    [CrrentString appendString:string]; 
    NSLog(@"%@",CrrentString); 
} 

-(void)parser:(NSXMLParser *)parser 
    didStartElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
    qualifiedName:(NSString *)qName 
    attributes:(NSDictionary *)attributeDict 
{ 
    currentKey = nil; 

    if ([elementName isEqualToString:@"extract"]) { 
     CrrentString = [attributeDict objectForKey:@"extract"]; 
     return; 
    } 
} 

그러나 결국

, 이것은 나에게 NSMutableString ( CrrentString) 내부에만 >을 제공합니다.

CrrentString = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

때마다 발견 된 문자 방법은 이전 CrrentString 덮어 작동합니다

답변

2

이 줄은 문제가 있습니다. 그래서 마지막으로 발견 된 캐릭터 만 얻는 것입니다.

그래서 좋아 변경 :

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    NSString *temp= (NSString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    [CrrentString appendString:temp]; 
    NSLog(@"%@",CrrentString); 
} 

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    CrrentString = nil; 

    if ([elementName isEqualToString:@"extract"]) 
    { 
     CrrentString = [[NSMutableString alloc] init]; 
    } 
} 

가 도움이 바랍니다.