【发布时间】:2013-02-13 19:41:53
【问题描述】:
这是我的方法体,用于从 RSS 提要生成的格式不正确的 html 中解析“img src”图像链接...我知道 NSXML 仅解析 XML,但我希望它可以偶然发现从凌乱的 html 中找到这些微小的图像链接。
我试图仅检索在 src 属性中找到的第一个图像链接,我在具有 src 属性的 nsData 中名为 IMG 的每个元素名称中找到,然后将其保存到另一个类中的 NSString *img 中。 img 标签并不完全相同,例如 nsData 的一个实例将只包含一个图像实例,例如以下任何一个:
我不需要的东西
我不需要的东西
更多我不需要的东西
似乎生成 NSLog 输出的唯一类是第一个类。
如何让解析器方法真正运行?
鉴于有一种方法,您是否推荐一种不同的、更简单的方法?
#import "HtmlParser.h"
#import "ArticleItem.h"
@implementation HtmlParser
@synthesize elementArray;
- (HtmlParser *) InitHtmlByString:(NSString *)string {
// NSString *description = [NSString string];
NSData *nsData = [[NSData alloc] initWithContentsOfFile:(NSString *)string];
elementArray = [[NSMutableArray alloc] init];
parser = [[NSXMLParser alloc] initWithData:nsData];
parser.delegate = self;
[parser parse];
如果我 NSLog(@"%@", nsData);在这个方法体中,输出会输出原始 HTML。
currentHTMLElement = [ArticleItem alloc];
return self;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"img src"]) {
currentHTMLElement = [[ArticleItem alloc] init];
}
NSLog(@"\t%@ found a %@ element", self, elementName);
}
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if (!currentHTMLElement)
currentHTMLElement = [[NSMutableString alloc] initWithString:string];
NSLog(@"Processing Value: %@", currentHTMLElement);
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"img src"])
{
currentHTMLElement.img = elementName;
[elementArray addObject:currentHTMLElement];
currentHTMLElement = nil;
currentNodeContent = nil;
}
else
{
if (currentHTMLElement !=nil && elementName != nil && ([elementName isEqualToString:@"img src"]))
{
[currentHTMLElement setValue:currentHTMLElement forKey:elementName];
}
}
currentHTMLElement = nil;
}
@end
感谢您的意见。
【问题讨论】:
-
在标准 XML 中,元素名称是
img,src是attributesDict返回的属性,将由didStartElement传递给您。你能告诉我们你想要做什么(即只检索一个 img 标签?返回很多?也解析 HTML 以获取其他信息)?但NSXMLParser无法解析所有 HTML。它解析 XML。 -
抱歉不清楚 Rob,非常感谢您的时间和想法。我试图只检索在 src 属性中找到的图像链接,我在 nsData 中名为 IMG 的每个元素名称中找到了具有 src 属性的图像链接,然后将其保存到另一个类中的 NSString *img 中。
-
我已经用 Hpple 和 NSXMLParser 示例更新了我的答案。
标签: iphone html ios nsxmlparser