2012-04-06 40 views
0

我有一個實現NSXMLParser中的方法並解析XML文檔的類。由於類將用於解析多個xml文檔,因此傳入我的類的鍵將發生更改。從NSArray動態創建NSString - NSXMLParser

當我解析文檔時,我檢查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]; 
    } 
} 

回答

0

解析器應該有一個的NSMutableString,你應該把它設置爲空字符串didStartElement,附加在foundCharacters字符串和字符串保存到你的NSDictionary在didEndElement ,像這樣:

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