Domanda

Sto cercando di analizzare un feed RSS di Overflow Stack di una domanda specifica:https://stackoverflow.com/feeds/question/2110875

Per questo sto usando la libreria touchxml. Sembra esserci un problema nel seguente codice:

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

L'istruzione NSLog dovrebbe restituire il conteggio di tutte le voci nell'alimentazione. In questo caso dovrebbe essere "3", il problema è che restituisce 0.

Ho scoperto che questo pezzo di codice funziona:

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

Ma usare questo sembra hacky (probabilmente lo è) e introduce alcuni altri bug sporadici.

Per quanto ne so, l'espressione di XPath è corretta. L'ho controllato usando questo anche pagina.

Qualcuno può aiutarmi con questo problema o indicarmi nella giusta direzione.

Grazie.

È stato utile?

Soluzione

Ho avuto un problema molto simile. Questo ha qualcosa a che fare con lo spazio dei nomi XML, che TouchXML non supporta molto bene (un problema noto).

Credo che nel tuo hack, lo spazio dei nomi non sia passato al secondo parser, ecco perché funziona.

Un modo più semplice è solo cambiare

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

sostituito con semplicemente

<html>

E XPath ora funziona.

Altri suggerimenti

Forse inizia usandolo effettivamente error argomento a nodesForXPath:error Per vedere se restituisce un errore? E controlla se allEntries non è nil Dopo aver fatto quella chiamata?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top