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

希望能对大家有所帮助。