Проблема с NSScanner!Получить URL тегов img! - PullRequest
0 голосов
/ 15 июля 2011

Я использую этот код, чтобы получить первое изображение канала ... htmlString содержит HTML-теги, и в тех же случаях я могу правильно получить первое изображение, но в других случаях я получаю нулевую NSString. Я не понимаю почему. Я уверен, что htmlString содержит одно изображение. Например, для этой строки я не могу правильно получить первое изображение.

Пример: CultOfMac предоставляет бесплатное приложение для Mac App Store для приложений OS X 10.7 Lion. В этом случае появятся самые лучшие версии приложений для iPhone, iPad, iOS 4.2.1 для iPhone и iPad, прошивка для мобильных устройств, разработанная специально для этой системы. OS X Lion í più vicino al rilascio? </p> <p><img class="aligncenter size-full wp-image-21789" title="mac-app-store_t" src="http://static.slidetomac.com/wp-content/uploads/2011/07/mac-app-store_t.jpg" alt="" width="507" height="300" /></p> <p><span id="more-21780"></span></p> <p> Сольная игра для Apple ....

Часть кода, которая мне нужна: <img class="aligncenter size-full wp-image-21789" title="mac-app-store_t" src="http://static.slidetomac.com/wp-content/uploads/2011/07/mac-app-store_t.jpg" alt="" width="507" height="300" /

Но я не могу правильно получить URL изображения ... Что не так в моем коде? спасибо

- (NSString *)getFirstImage:(NSString *)htmlString{



    NSString *urlImage=nil;
    NSScanner *theScanner = [NSScanner scannerWithString:htmlString];
    // find start of IMG tag
    [theScanner scanUpToString:@"<img" intoString:nil];
    do {
        [theScanner scanUpToString:@"src" intoString:nil];
        NSCharacterSet *charset = [NSCharacterSet characterSetWithCharactersInString:@"\"'"];
        [theScanner scanUpToCharactersFromSet:charset intoString:nil];
        [theScanner scanCharactersFromSet:charset intoString:nil];
        [theScanner scanUpToCharactersFromSet:charset intoString:&urlImage];

        if([urlImage rangeOfString:@"imagebutton.gif"].location == NSNotFound) return urlImage;


    }while (![theScanner isAtEnd]  );


    if([theScanner isAtEnd]) return nil;
     return urlImage;
}

1 Ответ

1 голос
/ 15 июля 2011

Что не так в моем коде?

Вы используете сканер сканирования для анализа HTML.

Синтаксический анализ HTML очень сложен; все проблемы синтаксического анализатора XML в сочетании с повсеместным отсутствием согласованности.

К счастью, разбор HTML - это тоже очень большая проблема.

Используйте правильный анализатор HTML. libxml2 имеет режим, совместимый с HTML.

На SO есть множество вопросов / ответов о разборе HTML.

...