La prochaine tâche va être de réécrire la manière dont les fichiers XML sont lus.
Le code actuel n'est pas totalement mauvais, il cherche bien les éléments en les parsant récursivement (sans doute le seul moyen), le problème étant qu'une fois qu'il les a trouvé, il les traite via leur chemin complet.
Un peu comme si on voulait lister tous les fichiers d'un disque dur, la routine chercherait les fichiers dans chaque sous-dossier, mais la récupération des nom, taille et date de ses fichiers se ferait via "C:\Dossier\Sous-dossier\Sous-dossier\Sous-dossier\Sous-dossier\Sous-dossier\Fichier", ce qui en XML semble donc coûteux. Cette récupération se fera donc à partir du dernier élément trouvé et non à partir de la racine.
Un autre sujet de réflexion est apparu, qui concerne l'utilisation des éléments XML.
La première version d'une donnée XML était la copie conforme de la donnée XT4 :
Code : Tout sélectionner
//--------------------------------------------------------------------------------
// Modèle 1 (Original)
// Chaque champ et chaque ligne d'une liste de textes est stocké dans un Tag
//--------------------------------------------------------------------------------
<Data>
<Ident>123456789</Ident>
<Model>Contact</Model>
<Encrypted>False</Encrypted>
<Properties>
<Prop>Caption="Pro"</Prop>
<Prop>Color="Red"</Prop>
</Properties>
<Text>
<Line>Ceci est la ligne 1</Line>
<Line>Ceci est la ligne 2</Line>
<Line>Ceci est la ligne 3</Line>
<Line>Ceci est la ligne 4</Line>
<Line>Ceci est la ligne 5</Line>
</Text>
<Children>
<Data>...</Data>
<Data>...</Data>
<Data>...</Data>
</Children>
</Data>
Récemment, les lignes de <Text> ont été mergées, certaines de mes Notes faisant plusieurs milliers de lignes :
Code : Tout sélectionner
//--------------------------------------------------------------------------------
// Modèle 2 (Actuel)
// Les lignes de la liste de textes <Text> sont concaténées en un seul élément
// (¤ = caractère de fin de ligne)
//--------------------------------------------------------------------------------
<Data>
<Ident>123456789</Ident>
<Model>Contact</Model>
<Encrypted>False</Encrypted>
<Properties>
<Prop>Caption="Pro"</Prop>
<Prop>Color="Red"</Prop>
</Properties>
<Text>Ceci est la ligne 1¤Ceci est la ligne 2¤Ceci est la ligne 3¤Ceci est la ligne 4¤Ceci est la ligne 5</Text>
<Children>
<Data>...</Data>
<Data>...</Data>
<Data>...</Data>
</Children>
</Data>
Cette solution pourrait donc être également utilisé pour <Properties>, la seconde liste de textes :
Code : Tout sélectionner
//--------------------------------------------------------------------------------
// Modèle 3
// Les lignes de la liste de textes <Properties> sont concaténées aussi en un seul élément
// (¤ = caractère de fin de ligne)
//--------------------------------------------------------------------------------
<Data>
<Ident>123456789</Ident>
<Model>Contact</Model>
<Encrypted>False</Encrypted>
<Properties>Caption="Pro"¤Color="Red"</Properties>
<Text>Ceci est la ligne 1¤Ceci est la ligne 2¤Ceci est la ligne 3¤Ceci est la ligne 4¤Ceci est la ligne 5</Text>
<Children>
<Data>...</Data>
<Data>...</Data>
<Data>...</Data>
</Children>
</Data>
Code : Tout sélectionner
//--------------------------------------------------------------------------------
// Modèle 4
// Les champs sont stockés en attribut, les listes d'éléments sont supprimées
// (¤ = caractère de fin de ligne)
//--------------------------------------------------------------------------------
<Data Ident="123456789" Model="Contact" Encrypted="False">
<Properties>Caption="Pro"¤Color="Red"</Properties>
<Text>Ceci est la ligne 1¤Ceci est la ligne 2¤Ceci est la ligne 3¤Ceci est la ligne 4¤Ceci est la ligne 5</Text>
<Children>
<Data>...</Data>
<Data>...</Data>
<Data>...</Data>
</Children>
</Data>
Avoir moins d'éléments améliorera énormément les performances mais pourrait nuire à la lisibilité des fichiers.
Quant à la liste des Data enfants:
Code : Tout sélectionner
<Children>
<Data>...</Data>
<Data>...</Data>
<Data>...</Data>
</Children>
Code : Tout sélectionner
<Data>...</Data>
<Data>...</Data>
<Data>...</Data>
Code : Tout sélectionner
<Children Count="3">
<Data>...</Data>
<Data>...</Data>
<Data>...</Data>
</Children>