Merci pour cette réponse qui m'en apprend encore un peu plus sur un sujet beaucoup trop vite traité pendant ma formation.
A vouloir trop simplifier, je n'ai pas été assez précis dans le problème que je cherche à traiter. Je vais exposer ici un sujet facile à comprendre et qui met en oeuvre sensiblement la même problématique que mon sujet réel (trop complexe à expliquer).
1 - Je reçois un fichier texte très rustique (encore moins précis que le résultat d'un formulaire html)
Ce fichier contient les références d'une personne, d'une part, et une liste de livres OU de CD OU de vidéos d'autre part.
Dans le cas de livres, j'aurai le titre, le ou les auteurs, l'editeur, la collection, l'année, etc.
Dans le cas de CD, j'aurai le titre de l'album, l'interprète, les titres de chansons, etc.
Dans le cas de vidéos, j'aurai le titre, le réalisateur, les acteurs principaux, le genre, etc.
Bien entendu, il manquera des informations un peu partout, et le fichier texte étant écrit à la main, il y aura pas mal d'erreurs de présentation (espaces, majuscules, fautes de frappe, etc.)
2 - Je veux convertir ce fichier texte en fichier XML afin de pouvoir en faire ce que je veux : alimenter une base de données, convertir le fichier texte en fichier Excel, afficher les données sur une page Web, envoyer les données à un correspondant qui les traitera à sa manière, ou n'importe quoi d'autre.
Je pense que le format XML est bien adapté dans ce cas.
3 - Je constate que les fichiers reçus seront différents selon qu'ils traitent de livres, de CD ou de vidéo. Leur point commun, c'est qu'ils sont tous bâtis sur le modèle Label = Valeur.
Ils ont des labels en commun et d'autres qui leurs sont personnels.
Ils ont tous une partie qui concerne le propriétaire et une partie qui duplique x fois une série de labels.
Certains labels sont absents du fichier initial mais devront être présents dans le résultat final, avec une valeur nulle ou par défaut.
Certains labels sont présents plusieurs fois de suite (plusieurs auteurs, plusieurs acteurs, ...)
Pour résoudre ce problème, je commence par créer une classe MesLabels qui recense tous les labels possibles. Je peux décider d'en ajouter ou d'en supprimer par la suite pour améliorer l'appli.
Cette classe possède des méthodes qui fabriquent le blocs de labels adapté aux livres, celui adapté aux aux CD celui adapté aux films, et celui qui correspond aux renseignements sur le propriétaire/expéditeur du fichier texte. (Pas besoin de méthode main() dans MesLabels, sinon pour tester le bon fonctionnement de la classe).
Chacune de ces méthodes ajoute à l'ArrayList une partie du squelette du fichier final, en y plaçant les valeurs par défaut.
Ma classe principale appelle les méthodes de la classe MesLabels pour fabriquer le squelette complet du fichier final.
Par exemple, si je reçois une liste de 3 livres, j'appelle la methode identite() puis 3 fois la méthode blocLivres().
l'ArrayList ressemblera à ceci :
nom = Doe
prenom = John
ville = Nowhere
titre = xxx
auteur = xxx
editeur = xxx
annee = 0
titre = xxx
auteur = xxx
editeur = xxx
annee = 0
titre = xxx
auteur = xxx
editeur = xxx
annee = 0
Ensuite, la classe principale se charge de modifier le squelette ainsi généré pour y placer les bonnes valeurs et éventuellement ajouter les champs multiples qui manquent.
Résultat :
Par exemple, si je reçois une liste de 3 livres, l'ArrayList ressemblera à ceci :
nom = Martin
prenom = Jean
ville = Nowhere
titre = Les 3 mousquetaires
auteur = Alexandre Dumas
editeur = xxx
annee = 0
titre = Java 2
auteur = Robert Chevallier
editeur = CampusPress
annee = 2002
titre = Les aventures de moi-même
auteur = Paul Machin
auteur = Philippe Truc
auteur = Albert Bidule
editeur = xxx
annee = 0
Les champs non trouvés dans le fichier texte conservent leurs valeurs par défaut (qu'elles soient judicieuses ou non), et ici j'ai dû ajouter deux champs auteur par rapport au squelette généré.
Il ne reste plus qu'à relire ligne par ligne l'ArrayList pour générer le fichier XML.
Mais pour ça, il faut que je sache lire dans ma classe principale l'ArrayList générée par les appels successifs aux méthodes de MesLabels.
Reste à savoir quel doit être le rôle pécis de MesLabels, ce que cette classe doit impérativement faire et ce qui n'est pas de son ressort, sachant qu'une autre classe que ma classe principale pourrait avoir besoin de l'appeler pour une raison x.
Est-ce plus clair ainsi ?