0

我使用 SDWebImage 从解析的 XML 文件中下载图片,并将其显示在 TableView 中。但问题是某些图像未显示。这是它的样子:

在此处输入图像描述

这是我解析第一张图像并将其显示在 TableView 单元格中的代码:

// Parse out Image URL for cell
NSError *error = NULL;
NSRegularExpression *regexImage = [NSRegularExpression regularExpressionWithPattern:@"(<img\\s[\\s\\S]*?src\\s*?=\\s*?['\"](.*?)['\"][\\s\\S]*?>)+?"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                        error:&error];

[regexImage enumerateMatchesInString:item.content
                        options:0
                          range:NSMakeRange(0, [item.content length])
                     usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {

                         NSString *src = [item.content substringWithRange:[result rangeAtIndex:2]];
                         NSLog(@"img src: %@", src);

                         [cell.imageView setImageWithURL:[NSURL URLWithString:src] placeholderImage:[UIImage imageNamed:@"Placeholder.png"]];
                     }];
4

1 回答 1

0

«有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。» 来源

我认为您的正则表达式不准备处理德语变音符号,因为它包含在

http://www.floorballmagazin.de/wp-content/uploads/2013/03/Floorfighters-döbeln.jpg

很难(如果不是不可能的话)编写一个正则表达式,它可以正确处理 html 或只是它的片段。

如果我是你,我不会走那条路。你要么应该使用 html 解析器来解析它,要么——在这种情况下我更喜欢——使用 NSScanner。


这是如何使用 NSScanner 的示例:

 NSArray *imgtags = @[@"<p>sdf </p><img alt=\"\" src=\"http://www.floorballmagazin.de/wp-content/uploads/2013/03/Floorfighters-döbeln.jpg\" /> ",
                    @"<img src=\"http://www.floorballmagazin.de/wp-content/uploads/2012/01/20121501_nilsson_etv_as.jpg\" alt=\"Hat&#039;s nicht so mit blauem Dunst - Johan Nilsson.  / Foto: Andreas Schulz\" width=\"595\" height=\"384\" class=\"size-full wp-image-11542 colorbox-16600\" />"];    

[imgtags enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    NSScanner *scanner = [NSScanner scannerWithString:obj];
    [scanner scanUpToString:@"<img" intoString:NULL];
    [scanner scanUpToString:@"src" intoString:NULL];
    [scanner scanUpToString:@"=" intoString:NULL];
    [scanner scanUpToString:@"\"" intoString:NULL];
    [scanner setScanLocation:[scanner scanLocation]+1];
    NSString *s;
    [scanner scanUpToString:@"\"" intoString:&s];

    s = [s stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" "]];
    NSLog(@"%@", s);
}];

结果:

http://www.floorballmagazin.de/wp-content/uploads/2013/03/Floorfighters-döbeln.jpg
http://www.floorballmagazin.de/wp-content/uploads/2012/01/20121501_nilsson_etv_as.jpg
于 2013-03-23T16:19:20.880 回答