这是我的方法机构解析来自不良的HTML通过RSS源生成的“IMG SRC”图像链接...我知道,只有NSXML XML解析,但我有这个希望,它能够通过烂摊子跌跌撞撞找到这些微乎其微从凌乱的HTML图像链接。
我想只检索到src属性中我有一个src属性中的NSData称为IMG的每个元素名称查找发现的第一个图像链接,然后将其保存到的NSString * IMG另一个类。 在img标签都不尽相同,例如NSData的实例将只包含一个喜欢其中任何一个图像实例:
<IMG类= “MS-rteStyle-photoCredit” SRC = “www.imagelinkthatineed.com” 东西我不需要
<IMG ALT = “” SRC = “www.imagelinkineedfortableimagecellpreview” 东西我不需要
<IMG类= “MS-rteStyle-photoCredit” SRC = “www.IneedThisLink.com” 更多的东西,我不需要
这似乎产生的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
谢谢你的想法。