在JSON-iOS中解析<img src=""/>标记

时间:2015-05-26 09:25:09

标签: html ios objective-c json parsing

我有一个下载JSON Feed的iOS应用。除了剩下的一个元素之外,我已经设法解析了所有内容,这就是图像。

我正在下载的JSON提要是来自在线的PHP脚本,它将某些RSS提要转换为JSON。因此,为什么在包含图像的JSON Feed的其中一个元素中有HTML个图像标记。

我正在使用以下代码来访问标题,日期,链接网址等内容......而且效果很好:

NSArray *titles = [[[[data_dict objectForKey:@"rss"] valueForKey:@"channel"] valueForKey:@"item"] valueForKey:@"title"];

从上面的代码中可以看出,标题存储在名为&#34; title&#34;的JSON标记中。很容易解析。图像存储在名为&#34; description&#34;。

的标签中

此标记如何包含文本和图像URL。那么如何从中解析<img src>标签呢?

以下是JSON描述标记之一:

enter image description here

如何解析数组中的图像链接?

谢谢你的时间,Dan

1 个答案:

答案 0 :(得分:1)

请尝试使用以下代码 -

NSString *yourHTMLSourceCodeString = @"";

    NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(<img\\s[\\s\\S]*?src\\s*?=\\s*?['\"](.*?)['\"][\\s\\S]*?>)+?"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];

[regex enumerateMatchesInString:yourHTMLSourceCodeString
                        options:0
                          range:NSMakeRange(0, [yourHTMLSourceCodeString length])
                     usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {

                         NSString *img = [yourHTMLSourceCodeString substringWithRange:[result rangeAtIndex:2]];

                         NSURL *candidateURL = [NSURL URLWithString:img];

                         if (candidateURL && candidateURL.scheme && candidateURL.host)
                         {
                             NSLog(@"img src %@",img);
                         }


                     }];

<强>更新 使用以下正则表达式更改可以完成同样的事情 -

 NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(<img\\s[\\s\\S]*?src\\s*?=\\s*?['\"]((http|https)://.*?)['\"][\\s\\S]*?>)+?"
                                                                           options:NSRegularExpressionCaseInsensitive
                                                                             error:&error];