これは、RSSフィードによって生成された形式の悪いhtmlから「imgsrc」画像リンクを解析するための私のメソッド本体です... NSXMLはXMLのみを解析することを知っていますが、混乱を乗り越えてこれらの小さなものを見つけることができることを願っています乱雑なhtmlからの画像リンク。
src属性を持つnsDataのIMGという各要素名で見つかったsrc属性で見つかった最初の画像リンクのみを取得し、それを別のクラスのNSString*imgに保存しようとしています。imgタグはすべて同じではありません。たとえば、nsDataのインスタンスには、次のいずれかのような1つの画像インスタンスのみが含まれます。
<img class = "ms-rteStyle-photoCredit" src="www.imagelinkthatineed.com"必要のないもの
<img alt = "" src="www.imagelinkineedfortableimagecellpreview"必要のないもの
<img class = "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];
I 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
考えていただきありがとうございます。