iOS NSXMLParsing nicht formatiertes HTML

Dies ist mein Methoden-Body zum Parsen von "img src" -Bild-Links aus schlecht geformtem HTML, die von einem RSS-Feed generiert wurden ... Ich bin mir bewusst, dass NSXML nur XML analysiert, aber ich hoffe, dass es durch das Durcheinander stolpern kann, um diese winzigen Links zu finden Bild-Links von chaotisch HTML.

Ich versuche, NUR die ERSTE Bildverknüpfung abzurufen, die sich im Attribut src befindet, das sich in jedem Elementnamen mit dem Namen IMG in nsData befindet und die ein Attribut src enthält, und speichere sie dann in einem NSString * img in einer anderen Klasse. Die img-Tags sind nicht alle gleich, zum Beispiel enthält eine Instanz von nsData nur eine Image-Instanz wie eine der folgenden:

<img class = "ms-rteStyle-photoCredit" src = "www.imagelinkthatineed.com"Sachen, die ich nicht brauche

<img alt = "" src = "www.imagelinkineedfortableimagecellpreview"Sachen, die ich nicht brauche

<img class = "ms-rteStyle-photoCredit" src = "www.IneedThisLink.com"mehr Sachen brauche ich nicht

Die einzige Klasse, die anscheinend eine NSLog-Ausgabe generiert, ist die erste.

Wie kann ich erreichen, dass die Parser-Methoden tatsächlich ausgeführt werden?

Gibt es einen anderen, einfacheren Weg, den Sie empfehlen, vorausgesetzt, es gibt einen Weg?

#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];

Wenn ich NSLog (@ "% @", nsData); In diesem Methodenkörper wird das rohe HTML von der Ausgabe ausgespuckt.

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

Danke für deine Gedanken.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage