Bonjour,
Je cherche à découper un fichier XML de taille assez importante (jusqu'a 200 Mo) en petit fichier, en sachant que ce fichier contient entre autre une liste, c'est cette liste qui sera découpée pour apparaitre dans les différents fichiers qui résulteront du découpage. Pour ca, je définis une taille de lot, qui définira le nombre max d'élément de la liste que je veux voir apparaitre dans chacun de mes fichiers obtenus après découpage.
Par exemple, si nous avons en entrée le XML suivant:
et que je définis ma taille de lot a 2, je veux obtenir en sortie les 4 fichiers suivants:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <balise1> <balise2></balise2> <balise3> <sous_balise1></sous_balise1> </balise3> <balise4> <sous_balise2></sous_balise2> <sous_balise3></sous_balise3> </balise4> <list> <data>1</data> <data>2</data> <data>3</data> <data>4</data> <data>5</data> <data>6</data> <data>7</data> </list> </balise1>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <balise1> <balise2></balise2> <balise3> <sous_balise1></sous_balise1> </balise3> <balise4> <sous_balise2></sous_balise2> <sous_balise3></sous_balise3> </balise4> <list> <data>1</data> <data>2</data> </list> </balise1>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <balise1> <balise2></balise2> <balise3> <sous_balise1></sous_balise1> </balise3> <balise4> <sous_balise2></sous_balise2> <sous_balise3></sous_balise3> </balise4> <list> <data>3</data> <data>4</data> </list> </balise1>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <balise1> <balise2></balise2> <balise3> <sous_balise1></sous_balise1> </balise3> <balise4> <sous_balise2></sous_balise2> <sous_balise3></sous_balise3> </balise4> <list> <data>5</data> <data>6</data> </list> </balise1>Pour cela, je pensais utiliser Stax afin d'optimiser l'utilisation de la mémoire pour faire ce découpage, cependant la tâche semble ardue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13<balise1> <balise2></balise2> <balise3> <sous_balise1></sous_balise1> </balise3> <balise4> <sous_balise2></sous_balise2> <sous_balise3></sous_balise3> </balise4> <list> <data>7</data> </list> </balise1>
Je pensais pour cela parcourir le fichier entrant avec un XMLEventReader et pour chaque data que je rencontre j'incrémente un compteur et quand celui ci atteint ma taille de lot je ferme mon XMLEventWriter pour en créer un nouveau avec un nouveau nom de fichier (qui contient par exemple un compteur incrémenté de 1 pour chaque nouveau fichier qui résulte du découpage).
Le problème, c'est que je ne vois pas comment récupérer dans ces conditions ce qui se trouve au début et à la fin de fichier pour encapsuler la liste de data dedans.
Est ce que vous avez une idée ou une astuce, est ce que Stax est la meilleure façon de procéder dans mon cas?
Car sinon j'avais une autre solution en passant par un FileReader, mais j'aurais besoin de plusieurs passages aussi pour pouvoir récupérer tous mes éléments.
Toute aide ou conseil est la bienvenue.
Partager