Dynamically create NSString from NSArray - NSXMLParser



我有一个类,它实现了来自NSXMLParser的方法并解析XML文档。 由于类将用于解析多个 xml 文档,因此传递到我的类中的键将更改。

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

问题出在 foundCharacters 方法上,正在保存的字符串部分属于文档中的字符串。

我正在考虑的是为每个键创建一个 NSString,并在 foundCharacter 中,将挂起的字符串到该键动态创建的字符串。

这是我的阵列。

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

这是我找到的字符方法

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

你的解析器应该有一个NSMutableString,你应该在didStartElement中将其设置为空字符串,在foundCharacters中附加字符串,并将字符串保存到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];
    }
}

最新更新