iOS - Найшвидший спосіб отримати всі <img> в HTML-рядку?

У мене є багато рядків HTML (новини з Google Reader) для обробки. Найбільше, що мені потрібно зробити, це отримати всі теги IMG з HTML.

Чи може хто-небудь сказати мені найбільш ефективний спосіб зробити це?

Дякую

Крім того, що, якщо мені потрібно отримати всі теги, а також

теги? Будь-який найшвидший спосіб отримати одночасно або більше тегів за один запуск?

Дякую

1

3 Відповіді

Припускаючи, що HTML-рядки дійсно є дійсним xml (тобто вони фактично є XHTML), тоді вам слід розглянути можливість використання XPath, щоб відповідати всім елементам імені "IMG". Я використовував різні бібліотеки C у додатку iOS для успішного виконання такого роду речей.

2
додано
@cobbal, спасибі. але я не можу припустити, що, по суті, багато HTML-кодів з елементів RSS не є строгим дійсним HTML. Крім того, якщо я будую документ XHTML, він набагато повільніше, ніж сканування чистого рядка.
додано Автор Jackson Tale, джерело
Це досить велике припущення, щоб зробити для випадкових пунктів RSS, хоча.
додано Автор cobbal, джерело
Для пояснення, це може бути найкращим методом. Це залежить від вашого синтаксичного аналізатора xml і від того, наскільки добре він аналізує добре сформований або неправильний HTML.
додано Автор cobbal, джерело
Правда - Це ідея, яка працюватиме тільки на XHTML-сторінках і робить її обмеженою.
додано Автор Tim Dean, джерело

Іншим підходом, який можна спробувати, буде використання екземплярів NSScanner. Припускаючи, що у вас є HTML-рядок у NSString, який називається htmlString, можна спробувати щось подібне:

NSScanner *scanner = [NSScanner scannerWithString:htmlString];
while ([scanner scanUpToString:@"" intoString &tagContents]) {
       //Do something with tag contents
    }
    else {
       //Do nothing? I think this would be hit on the last time through the loop
    }
}
2
додано

Спробуйте libtidy + NSXMLParser:

 doc = [[NSXMLDocument alloc] 
           initWithContentsOfURL:url
                         options:(NSXMLNodePreserveWhitespace|NSXMLNodePreserveCDATA)
                           error:&err];
 if (!doc) {
     doc = [[NSXMLDocument alloc] 
           initWithContentsOfURL:url
                         options:NSXMLDocumentTidyHTML
                           error:&err];
 }

From the doc, NSXMLDocumentTidyHTML: Formats HTML into valid XHTML during processing of the document.

Якщо це не спрацює, ви можете спробувати завантажити HTML-джерело в UIWebView і використовувати JavaScript для доступу до DOM.

1
додано
Привіт, насправді це те, що я роблю, прибираю спочатку, а потім розбираю. але це дуже повільно. Вона коштує майже 0,5 - 0,9 сек для одного елемента rss (довжина HTML приблизно 2KB - 10KB). Якщо я роблю це для 50 пунктів, це близько 1 хвилини.
додано Автор Jackson Tale, джерело
Ви запитали про рядок HTML. RSS не є рядком HTML. Ви перевірили об'єктивні RSS парсери? Чим конкретніше, тим швидше, напевно.
додано Автор djromero, джерело
NSXMLDocument не доступний на iOS ... не обов'язково слідувати
додано Автор malaba, джерело