2010-02-03 6 views
3

J'essaie d'analyser un débordement de pile flux RSS d'une question spécifique: https://stackoverflow.com/feeds/question/2110875SO Parsing flux RSS en utilisant TouchXML, aucun tag trouvé <entry>

Pour cela, je suis en utilisant la bibliothèque TouchXML. Il semble y avoir un problème dans le code suivant:

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 

La déclaration NSLog doit retourner le nombre de toutes les entrées dans l'alimentation. Dans ce cas, il devrait être « 3 », problème est qu'il renvoie 0.

Je trouve que ce morceau de code fonctionne:

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 

Mais en utilisant ce qui semble hacky (il est probablement) et présente quelques autres insectes sporadiques.

Autant que je sache, l'expression Xpath est correcte. Je l'ai vérifié en utilisant également la page this. Est-ce que quelqu'un peut m'aider avec ce problème, ou me diriger dans la bonne direction.

Merci.

Répondre

2

J'ai eu un problème très similaire. Cela a quelque chose à voir avec l'espace de noms XML, que TouchXML ne supporte pas très bien (un problème connu).

Je crois que dans votre hack, l'espace de noms n'a pas été passé dans le second analyseur, c'est pourquoi cela fonctionne.

Une façon plus facile est juste de changer

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 

remplacé par simplement

<html> 

et XPath fonctionne maintenant.

0

Peut-être commencer par réellement utiliser cet argument error à nodesForXPath:error pour voir si elle renvoie une erreur? Et vérifier si allEntries n'est pas nil après avoir fait cet appel?

+0

J'ai enregistré un message d'erreur et c'est null, donc il n'y a pas d'erreur. Le problème est que TouchXML ne renvoie tout simplement aucun nœud pour l'instruction Xpath, alors que AFAIK devrait juste les trouver. – Rengers