我有一个实现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];
}
}
答案 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];
}
}