从维基百科解析XML

时间:2012-09-13 15:30:51

标签: iphone nsxmlparser nsmutablestring

我正在使用NSXmlParser并尝试解析此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

1 个答案:

答案 0 :(得分: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];
    }
}

希望它能提供帮助。