Пример синтаксического анализа (X) HTML с libxml2 в iOS - PullRequest
4 голосов
/ 15 июля 2011

Недавно я начал играть с libxml2 lib в проекте iOS для iPhone. Я прочитал несколько полезных ссылок, таких как:

http://laurentparenteau.com/blog/2009/12/parsing-xhtml-in-c-a-libxml2-tutorial/

и очень хороший пост здесь:

http://bill.dudney.net/roller/objc/entry/libxml2_push_parsing

Мне удалось получить удаленный html (с помощью ASIHTTPRequest) и успешно получить данные (NSData) о событии didReceiveData, помещенном в класс-оболочку, содержащий синтаксический анализатор, созданный с помощью htmlCreatePushParserCtxt (стиль SAX). Я хорошо получаю startDocument и обратные вызовы endDocument. В обратных вызовах 'startElement' и 'characters' я печатаю параметр 'localname' ( const xmlChar ). В консоли я вижу, что он находит 'html', затем 'body', затем какой-то тег 'p', но затем я получаю множество неузнаваемых символов (иногда это выглядит даже как китайский ..) ...

В любом случае, прежде чем углубляться в детали кода, я хочу спросить, есть ли у кого-нибудь работающий пример синтаксического анализа (x) html с libxml2 в проекте, основанном на цели c? Я пробовал поискать в Google более двух упомянутых ссылок, но до сих пор не повезло.

Ответы [ 2 ]

0 голосов
/ 01 января 2013

Я бы предложил AQXMLParser от Алан Квартемен: http://blog.alanquatermain.me/2013/01/09/using-aqxmlparser-and-friends/

это тонкая оболочка в libxml2 и намного более производительная, чем NSXMLParser.

установите для свойства HTMLMode значение yes, чтобы оно использовало libxml в режиме html. (Я использовал его много раз, и оно отлично работает даже с недействительным html)

0 голосов
/ 05 сентября 2011

Почему вы хотите использовать libxml2 вместо встроенного в Apple класса NSXMLParser? Если вы создаете приложение для iOS, для этого имеет больше смысла использовать класс Foundation, чем библиотеку C. Вы можете получить доступ к документации для NSXMLParser на веб-сайте Apple .

Если вы не хотите использовать NSXMLParser напрямую, вы можете попробовать проанализировать XML с помощью NSXMLDocument , который имеет простой в использовании метод - (id)initWithData:(NSData *)data options:(NSUInteger)mask error:(NSError **)error для анализа XML-данных. Вы даже можете использовать опцию NSXMLDocumentTidyHTML для метода init, чтобы читать данные HTML как XHTML.

...