从NSArray动态创建NSString - NSXMLParser

时间:2012-04-06 15:39:43

标签: ios ios5 nsstring nsarray nsxmlparser

我有一个实现NSXMLParser方法并解析XML文档的类。由于class将用于解析几个xml文档,因此传递给我的类的键将会改变。

当我解析文档时,我正在检查didStartElement和didEndElement是否匹配我的键,然后在foundCharacters中将字符串保存到NSDictionary。 NSDictionary将通过选择器返回给我的委托。

问题在于使用了foundCharacters方法,保存的字符串与文档中的字符串不同。

我在想的是为每个密钥和foundCharacters创建一个NSString,将字符串添加到该密钥的动态创建字符串中。

这是我的阵列。

NSArray *items = [NSArray arrayWithObjects:@"id", @"time", @"newtime", @"title", @"html", @"image", @"url", nil];

使用以下方法将其传递到我的解析器中。

-(void) parseArticles:(NSString *)url keys:(NSArray *)findKeys containingString:(NSString *)containing withDelegate:(id)aDelegate {

    keys = findKeys;
    [self setDelegate:aDelegate];

    responseData = [NSMutableData data];
    NSURL *baseUrl = [NSURL URLWithString:url];

    NSLog(@"Loading URL: %@", url);

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    NSURLRequest *request = [NSURLRequest requestWithURL:baseUrl];
    (void)[[NSURLConnection alloc] initWithRequest:request delegate:self];

}

这是我的foundCharacters方法

-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    for(NSString *toFind in keys){
        if([currentItem isEqualToString:toFind]) [item setObject:string forKey:toFind];
    }
}

1 个答案:

答案 0 :(得分:0)

你的解析器应该有一个NSMutableString,你应该在didStartElement中将它设置为空字符串,在findCharacters中附加字符串并将字符串保存到didEndElement中的NSDictionary中,如下所示:

-(void)parser:(NSXMLParser *)parser didStartElement...
{
     myMutableString = [[NSMutableString alloc] initWithFormat:@""];
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
     [myMutableString appendString:string];
}

-(void)parser:(NSXMLParser *)parser didEndElement...
{
     for(NSString *toFind in keys){
        if([currentItem isEqualToString:toFind]) [item setObject:myMutableString forKey:toFind];
    }
}