iPhone, разбирающий HTML с TouchXML - PullRequest
0 голосов
/ 21 июля 2010

имеет опыт работы с парсингом HTML с помощью библиотеки TouchXML на iPhone. Я хотел бы проанализировать некоторые HTML и, следовательно, попробуйте сделать следующее

self.parser = [[CXMLDocument alloc]initWithData:self.html options:0 error:&error1];

 if (error1) {
  NSLog(@"Error: %d", error1);
 }

 NSError *error;

 NSArray *resultNodes = [[NSArray alloc]init];

 NSLog(@"starting to do some crazy parsing");


 resultNodes = [self.parser nodesForXPath:@"//div" error:&error];
 if (error)
  NSLog(@"initWithData error : %d", error);

К сожалению, это не работает вообще. И я не знаю, как отладить это правильно. Мой HTML должен быть действительным. Он просто начинается с тега html, что означает отсутствие типа документа. Кажется, что метод initWithData уже дает сбой и возвращает следующую ошибку: Ошибка: Ошибка Домен = CXMLErrorDomain Code = -1 «Операция не может быть завершена. (Ошибка CXMLErrorDomain -1.)» «Если я пытаюсь вывести вторую ошибку, приложение вылетает раньше, вероятно, из-за того, что initWithData не работает ,

Кто-нибудь из вас имел опыт разбора HTML с помощью библиотеки TouchXML?

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 29 июля 2011

Следующие работали абсолютно нормально для меня.Попробуйте.

 CXMLDocument *rssParser = [[[CXMLDocument alloc] initWithContentsOfURL:url options:0 error:nil] autorelease];
resultNodes = [rssParser nodesForXPath:@"//item" error:nil];

// Loop through the resultNodes to access each items actual data
for (CXMLElement *resultElement in resultNodes) {
  ....

Также убедитесь, что ваша ссылка верна.Пару раз это случалось со мной, когда я использовал feed: //www.foo.com/feed вместо http://www.foo.com/feed

Cheers.

0 голосов
/ 21 июля 2010

Прежде всего, ошибка - это указатель на объект, так что если вы хотите его распечатать. Должно быть: NSLog(@"%@", error1); То же самое для ошибки. Если вы хотите напечатать код ошибки. Вы можете сделать NSLog(@"%d", [error1 code]). То, что вы нам даете, это просто область памяти ошибки

...