Parcourir un document XML avec SAX

Problème

Vous voulez lire un fichier XML sans le mettre en mémoire.

Solution

Créez un contexte avec xmlFileCreateParserCtxt() et renseignez ce contexte avec des fonctions de rappel. Ces fonctions dites callback seront appelées au fur et à mesure de la lecture en fonction de la nature de ce que l’analyseur syntaxique lit. Puis faites appel à ce dernier avec xmlParseDocument().

Discussion

La création et l’initialisation d’un contexte s’effectue ainsi :


  xmlParserCtxtPtr ctxt; 
  xmlSAXHandler *my_sax_handler; 
 
  if (NULL == (my_sax_handler = malloc (sizeof *my_sax_handler))) 
    exit (EXIT_FAILURE); 
  memset (my_sax_handler, 0, sizeof *my_sax_handler); 
 
/* Attribution des fonctions de rappel. */ 
  my_sax_handler->getEntity = cb_sax_get_entity; 
  my_sax_handler->startDocument = cb_sax_start_document; 
  my_sax_handler->endDocument = cb_sax_end_document; 
  my_sax_handler->characters = cb_sax_characters; 
  my_sax_handler->cdataBlock = cb_sax_cdata; 
  my_sax_handler->startElement = cb_sax_start_element; 
  my_sax_handler->endElement = cb_sax_end_element; 
  my_sax_handler->comment = cb_sax_comment; 
  my_sax_handler->warning = cb_sax_warning; 
  my_sax_handler->error = cb_sax_error; 
  my_sax_handler->fatalError = cb_sax_fatal_error; 
 
/* Création du contexte. */ 
  if (NULL == (ctxt = xmlCreateFileParserCtxt (filename))) 
    exit...
Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Créer et utiliser un fichier de configuration en XML
Suivant
Rechercher une donnée dans un document XML (SAX)