Парсинг так RSS-канала с помощью TouchXML, никаких тегов не найдено
Я пытаюсь разобрать переполнение стека RSS-канал конкретного вопроса: https://stackoverflow.com/feeds/question/2110875
Для этого я использую библиотеку TouchXML. По-видимому, проблема заключается в следующем коде:
CXMLDocument *parser = [[CXMLDocument alloc] initWithData:sourceData options:0 error:nil];
NSArray *allEntries = [parser nodesForXPath:@"//entry" error:nil];
NSLog(@"Found entries: %d",[allEntries count]); //Returns 0
Оператор NSLog должен возвращать количество всех записей в ленте. В этом случае он должен быть '3', Проблема в том, что он возвращает 0.
Я обнаружил, что этот фрагмент кода действительно работает:
CXMLDocument *preParser = [[CXMLDocument alloc] initWithData:sourceData options:0 error:nil];
NSString *sourceStringUTF8 = [preParser XMLString];
[preParser release];
CXMLDocument *parser = [[CXMLDocument alloc] initWithData:[sourceStringUTF8 dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
NSArray *allEntries = [parser nodesForXPath:@"//entry" error:nil];
NSLog(@"Found entries: %d",[allEntries count]); //Returns 3, which is ok
Но использование этого кажется халтурным (it вероятно, есть) и вводит несколько других спорадических ошибок.
Насколько мне известно, выражение Xpath является правильным. Я проверил это, используя ЭТУ страницу.
Может ли кто-нибудь помочь мне с этой проблемой или указать мне правильное направление?Спасибо.
2 ответа:
У меня была очень похожая проблема. Это как-то связано с пространством имен xml, которое TouchXML не очень хорошо поддерживает (известная проблема).
Я считаю, что в вашем взломе пространство имен не было передано во второй синтаксический анализатор, поэтому он работает.
Более простой способ-это просто изменить
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
Заменяется просто
<html>
И xPath теперь работает.