(Edit : Je me suis trompé, ce sujet serait mieux dans /Modules plutôt qu'ici. Si quelqu'un pouvait déplacer ce sujet... Merci d'avance !)
Bonjour,
récemment j'ai créé un topic qui traitait de la transformation des balises XML, et j'ai été bien aidé, alors je me permet un autre sujet.
Je vais essayer d'être clair immédiatement cette fois-ci
Sujet :
Fusionner des fichiers XML possédant la même structure
(racine : volume
fils : entry (+ sous éléments))
Problématique :
Les fichiers xml sont ici très gros (entre 10 et 100 mo, entre 15 000 et 100 000 éléments <entry>).
Il s'agit donc d'utiliser les handlers de XML::Twig (ou de proposer un autre module plus efficace dans ce cas-ci).
On pourrait par exemple avancer entrée par entrée comme suit :
1) si entry-fichier1 = entry-fichier2
on insère certains fils de entry-fichier2 dans entry-fichier1
2) si entry-fichier1 est inférieur (lexicographiquement) à entry-fichier2
on passe à l'entry suivant du fichier1, on ne change pas entry-fichier2 (et on ne fait rien d'autre).
3) si entry-fichier1 est supérieur (lexicographiquement) à entry-fichier1 (ce qui arrivera rarement), on ajoute entry-fichier2 en entier avant entry-fichier1, et on passe à l'entry suivant pour les deux fichiers.
Sujet proche sur le forum :
Une fusion de fichiers XML mais "à la Dom" (on charge tout en mémoire). Ici on voudrait une fusion "à la Sax" (avec donc les handlers).
J'ai une version sans handler (issu du sujet en référence au-dessus), mais qui ne fonctionne pas (ou alors il faudrait que je laisse tourner ma machine toute une nuit...je n'ai pas essayé).
Je cherche juste à avoir des pistes, pas forcément un code (ou alors juste un bout), parce que ça m'a l'air costaud à faire quand même.
Le plus difficile pour moi est le point 2) et 3), plus particulièrement d'avancer entrée par entrée dans deux fichiers à la fois.
J'espère avoir été clair, comme je suis dans le flou, il se peut que mes explications s'en ressentent.
(Pour indication :
La transformation que j'ai adaptée du code de Djibrill, en DOM, prend entre 40min et 3heures pour mes sources. en SAX, avec un handler qui porte sur entry, je ne dépasse pas 2minutes.
D'où mon envie de faire pareil ici !)
Si vous avez vu des sujets similaires, un bouquin qui en parle, ou même que vous avez bossé sur quelque chose de proche, n'hésitez pas ! Même une idée tout simple peut m'aider.
Sur le site officiel de Xml::Twig ou sur CPAN je n'ai trouvé aucune indication pour une telle application.
Si jamais ce sujet me permet de réaliser quelque chose qui fonctionne, je mettrai le code, je pense que ça peut servir. Je commence de mon côté à tester comment faire.
Partager