0

我有一个实现 NSXMLParser 方法并解析 XML 文档的类。由于类将用于解析几个 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];
    }
}
4

1 回答 1

0

您的解析器应该有一个 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];
    }
}
于 2012-04-06T17:18:26.367 回答