Archive

Articles taggués ‘xml’

Parser un fichier XML volumineux en C avec la Libxml2

24/05/2009

Dans le cadre d’un projet, j’ai plusieurs fichiers XML volumineux (plusieurs Go) que je dois parser pour en extraire des données à insérer en base de données. En fait, ces fichiers XML contiennent des articles d’un site de commerce électronique. Par un programme d’affiliation, je dois faire apparaître certains de ces articles sur un site web.

Lorsque que l’on souhaite parser du XML, on a principalement le choix entre 2 méthodes différentes. On a DOM (Document Object Model) qui va charger l’intégralité d’un document XML en mémoire sous forme d’un arbre, ce qui rend aisé la manipulation du document. Cependant avec un fichier XML volumineux cette méthode n’est pas possible. Dans ce cas, on va utiliser la méthode SAX (Simple API for XML). Avec SAX on a une analyse événementielle, cela veut dire que le document XML est analysé au fur et à mesure et selon le type de l’élément rencontré (balise, commentaire ou texte), une fonction de rappel (callback) est appelée pour traiter l’élément concerné. Donc SAX en utilisant moins de mémoire est parfait pour extraire des données de grands fichiers XML.

Par le passé, j’utilisais Java avec Xerces mais pour un souci de performance (le plus vite possible en utilisant le moins de mémoire) je me suis orienté sur des implémentations en C. J’ai découvert deux librairies open source : Expat et Libxml2. Comme il faut faire un choix, j’ai opté pour la Libxml2. Il s’agit d’une puissante boîte à outils XML développée dans le cadre du projet Gnome, mais elle est tout à fait utilisable en dehors de celui-ci, elle n’a pas de dépendance et elle se compile simplement avec l’API ANSI C.

Lire la suite…

Author: Damien Zufferey Categories: Développement C/C++ Tags: , , ,