Pregunta

Estoy tratando de analizar una alimentación RSS de desbordamiento de una pila de una pregunta específica:https://stackoverflow.com/feeds/question/2110875

Para esto, estoy usando la biblioteca TouchXML. Parece haber un problema en el siguiente código:

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 declaración NSLOG debe devolver el recuento de todas las entradas en el feed. En este caso, debe ser '3', el problema es que devuelve 0.

Descubrí que este código funciona:

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

Pero usar esto parece hacky (probablemente lo sea) e introduce algunos otros errores esporádicos.

Hasta donde yo sé, la expresión de XPath es correcta. Lo he comprobado usando este página también.

¿Alguien puede ayudarme con este problema o señalarme en la dirección correcta?

Gracias.

¿Fue útil?

Solución

Tuve un problema muy similar. Esto tiene algo que ver con el espacio de nombres XML, que TouchXML no es muy bueno (un problema conocido).

Creo que en tu hack, el espacio de nombres no pasó al segundo analizador, por eso funciona.

Una forma más fácil es cambiar

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

reemplazado con simplemente

<html>

y Xpath ahora funciona.

Otros consejos

Tal vez comience por usar eso error argumentar nodesForXPath:error ¿Para ver si devuelve un error? Y verificar si allEntries no es nil después de hacer esa llamada?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top