Bonjour,
Je vais coder un outil qui fera des modifications légères dans des fichiers OpenDocument, à savoir : changer quelques attributs href dans des balises.
En bon unixien, pour un tel traitement, je pense tout de suite à une lecture au fur et à mesure, une modification et une écriture à la volée : pas question de tout charger en mémoire, ça n'apporterait rien sinon une plus grande consommation de ressources. Sauf que c'est du XML, et que ça ne se traite certainement pas ligne par ligne, mais plutôt balise par balise.
Techniquement, rien ne s'oppose à un tel traitement à la volée. La lecture au fur et à mesure peut se faire avec un parseur SAX. Mais qu'en est-il de l'écriture ? J'ai l'impression qu'il n'existe tout simplement rien pour écrire du XML à la volée sans le stocker intégralement en mémoire. Sauriez-vous si je me trompe, et si en fait, ça existe, bien sûr ?
J'ai bien une solution de secours, qui consiste à lancer xmlstarlet pyx, pour convertir ce XML en PYX, un format équivalent orienté lignes, puis à traiter ligne par ligne, et à ressortir xmlstarlet pour en refaire du XML. Mais ça me dégoûte un peu de devoir lancer un processus pour cela alors que je pourrais ne pas quitter Python.
# Solution simple
Posté par yellowiscool . Évalué à 3.
Simple et efficace.
Envoyé depuis mon lapin.
# StAX
Posté par Anonyme . Évalué à 1.
Je n'ai pas vu d'implémentation dans un autre langage à l'époque où j'en avais besoin, donc j'ai tenté une implémentation en C que je n'ai jamais terminée (juste un truc très limité qui satisfaisait mes besoins). Ca a peut-être évolué depuis.
Si tu tombes sur des trucs intéressants, merci de les partager ici.
[^] # Re: StAX
Posté par Anonyme . Évalué à 3.
[^] # Re: StAX
Posté par Anonyme . Évalué à 2.
donc en python, non je ne sais pas désolé ...
AUTOFAIL ! ~~~~~> []
# Trouvé
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 3.
En regardant leur code source, on s'aperçoit que c'est une bête classe de fonctions de rappel SAX qui, à chaque « événement », écrit tout simplement le code XML correspondant.
Donc je sous-classe, et à chaque événement, je modifie ce que j'ai à modifier, puis j'appelle la méthode parente.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.