0

NSXMLParserのメソッドを実装し、XMLドキュメントを解析するクラスがあります。クラスはいくつかのxmlドキュメントを解析するために使用されるため、クラスに渡されるキーは変更されます。

ドキュメントを解析しているとき、didStartElementとdidEndElementがキーと一致することを確認してから、foundCharactersで文字列をNSDictionaryに保存しています。NSDictionaryは、セレクターを介して代理人に返されます。

問題はfoundCharactersメソッドにあり、保存される文字列はドキュメント内の文字列の一部です。

私が考えているのは、キーごとにNSStringを作成し、foundCharactersで、そのキー用に動的に作成された文字列に文字列を追加することです。

これが私の配列です。

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 に答える