1

我正在使用 NSXMLParser 解析来自 RSS Feed 的数据。从 CDATA 块中,我还通过首先捕获图像 url 来提取图像。这就是我使用 nsxmlparser 的 CDATA 方法的方式:

- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock {


    NSString *someString = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];

    [currentString appendString:someString];

    NSString *imageURLString = [self getFirstImageUrl:someString];
    NSLog(@"IMAGE URL STRING %@", imageURLString);

}

这是我从上述方法中调用的方法:

-(NSString *)getFirstImageUrl: (NSString *) html {

    NSScanner *theScanner;
    NSString *imageURL = nil;

    theScanner = [NSScanner scannerWithString: html];

    // find start of tag
    [theScanner scanUpToString: @"<img" intoString: NULL];
    if ([theScanner isAtEnd] == NO) {

        [theScanner scanUpToString: @"src=\"" intoString: NULL];
        NSInteger newLoc2 = [theScanner scanLocation] + 5;
        [theScanner setScanLocation: newLoc2];

        // find end of tag
        [theScanner scanUpToString: @"\"" intoString: &imageURL];
    }

    return imageURL;
}

正如你所看到的,一切都很干净而且简单。你可以看到下面的输出:

在此处输入图像描述

有什么办法让它不接收空值而只获取图像网址?

4

2 回答 2

2

为什么不自己忽略nil 值的字符串呢?

NSString *imageURLString = [self getFirstImageUrl:someString];
if (imageURLString)
    NSLog(@"IMAGE URL STRING %@", imageURLString);
于 2013-04-30T01:26:30.167 回答
0
[self getFirstImageUrl:someString];

你不应该使用你的 currentString 变量吗?

也不要以为

- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock

将只为 XML 节点调用一次,您应该在启动包含 CDATA 的节点时创建一个新的 NSMutableData 对象,使用 foundCDATA 委托方法将数据附加到您的 NSMutableData 并且仅在完成处理节点时使用您的 NSMutableData 对象(您有两个委托方法)

于 2013-04-29T15:51:27.347 回答