2009-10-28 6 views
0
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    xmlParseChunk(context, (const char *)[data bytes], [data length], 0); 
} 

ma question est la suivanteComment LibXmlParsing peut analyser en morceaux

=> didReceiveData: méthode reçoit des données dans les parties

ce que certains comme cette

  • premières données ---- ------ | <Masterdata> principal </ma
  • secondes données ----- | ster > <Masterdata> Main2
  • troisièmes données -------- | </méthode Masterdata >

=> Comment xmlParseChunk() peut analyser avec succès tous ces morceaux?

Répondre

2

Apple XMLPerformance sample app illustre une mise en œuvre complète de libxml2 intégré avec NSURLConnection et analyse syntaxique de morceau. Je l'ai trouvé très utile.

+0

Oui. J'ai cet exemple de code. & J'ai placé la même méthode, à partir de l'exemple de code. Mais je ne suis pas clair à propos de ça fonctionne. Il existe une méthode # xmlParseChunk() # en elle. il a la définition mais pas de corps. –

+1

Je ne suis pas sûr de savoir quelle est votre question. xmlParseChunk est implémenté dans la bibliothèque libxml2. Avec chaque fragment de données XML que vous lui transmettez, il peut continuer à analyser un peu plus loin. On peut supposer que si xmlParseChunk rencontre une balise XML imcomplete comme dans votre exemple, il arrête juste l'analyse syntaxique jusqu'à ce que vous passez plus de données. Je suppose qu'il utilise le pointeur xmlParserCtx pour maintenir son état. –

+0

Oke! c'est génial. c'est ce que je n'ai pas compris. –

0

Une approche consiste à faire en sorte que votre délégué contienne un membre NSMutableData et d'appeler appendData: lorsque vous obtenez de nouvelles données. Puis analyser quand votre délégué reçoit le message connectionDidFinishLoading.

+0

Ce serait fonctionnellement pas différent de l'analyse syntaxique une fois que le document entier est chargé en mémoire, qui contrecarre le but de l'analyse syntaxique en morceaux. –