2012-09-13 154 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; 
    } 
} 

但最終,這給了我只有NSMutableStringCrrentString)內>

回答

2

這條線,使問題:

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

當發現字符方法的工作覆蓋舊的CrrentString每次。這就是爲什麼你只能得到最後找到的人物。

因此改變它想:

-(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]; 
    } 
} 

希望能對大家有所幫助。