Générer facilement un fichier XML en C#

Dans cette astuce je vous explique comment utiliser Visual Studio et C# pour adapter les classes déjà créées dans le Technical Tip précédent.

On peut ainsi créer un fichier XML. Ceci est faisable avec l’aide d’attributs et des sérialiseurs fournis.

1. Introduction

Lorsque vous travaillez avec l’API de SOLIDWORKS ou de PDM, de nombreuses données sont traitées et modifiées. Il arrive souvent que ces données doivent également échangées entre elles.

Une solution ancienne mais encore courante est souvent utilisée pour cela.

C’est le „eXtensible Markup Language“ ou XML en abrégé. Dans cette nouvelle astuce, je vous explique ce qu’il en est exactement et comment il est créé.

2. Le langage XML c'est quoi ?

Le XML est un langage qui ne s’exécute pas comme un langage de programmation ou de script, mais décrit des choses. Sa structure est similaire à celle du HTML, mais il n’est nécessaire que pour transporter les données (et non pas pour les afficher). Les données sont définies dans ce que l’on appelle des balises. L’aspect de ces balises peut être défini par l’utilisateur.

Sur l’image 1, nous pouvons voir un exemple d’un fichier XML. Un élément XML se compose toujours de 2 balises: une balise d’ouverture et une balise de fermeture.

  1. La balise d’ouverture est toujours entourée de crochet (<)
  2. La balise de fermeture est toujours précédée par une barre oblique (/>).

Un fichier XML possède toujours un seul élément principal et ne peut en contenir plus.

Dans cet exemple il s’agit de l’élément « House ». Un élément peut également avoir des sous-éléments. Dans l’exemple, il s’agit de « Windows », « Door » et « People ». Ceux-ci peuvent également avoir des sous-éléments. Ceci peut être étendu à volonté.

En plus, les éléments peuvent aussi avoir des attributs. Dans l’exemple illustré, il s’agit de « Count » pour le nombre de « Windows » et de « People » ainsi que pour les noms des personnes. En résumé, les données qui seront transmises sont les suivantes; il y a une maison avec 2 fenêtres et une porte, ainsi que 3 personnes dans le foyer qui se nomment Bernd, Lisa et Klaus.

Un tel fichier doit maintenant être créé en C# ainsi que les classes déjà créées dans le Tech Tip précédent.

3. Personnalisation des classes

Afin de créer un fichier XML, il est important qu’une classe contienne des propriétés avec le modificateur « public ».

La classe elle-même doit également être définie en « public ». En outre, la classe doit toujours avoir un constructeur, qui ne nécessite aucun paramètre.

Pour que ces classes puissent aussi être sérialisées, chaque classe doit également posséder l’attribut « [Serializable] ».

Ceci est écrit sur la ligne au-dessus de la classe. Pour ce faire, on peut adapter le fichier « SolidworksFile » pour que chaque type de fichier ait certaines propriétés.

Ici, par exemple, une propriété « Nom de fichier » pourrait être insérée et la propriété « Chemin de fichier » existante pourrait être fournie avec le modificateur « public ». De même, une valeur doit également être attribuée à la propriété dans le constructeur.

La méthode « GetFileName » de la bibliothèque système disponible est utilisée à cet effet.

C’est ce que montre la figure 2.

Une liste de « PartFiles » est également insérée dans le fichier « AssemblyFile.cs », étant donné qu’un assemblage est constitué de pièces et qu’une affectation peut ainsi être effectuée.

Ceci est également visible sur la figure 3. Ici aussi, la classe doit être paramétrée sur « Public ».

De plus, cette classe a également besoin d’un constructeur vide.

Enfin, le « PartFile.cs » doit également être ajusté. Ici, la classe est uniquement définie sur « Public » et un constructeur vide est créé. Cela peut également être vu à nouveau sur la figure 4.

L’attribut « Serializable » peut être défini dans les classes « AssemblyFile » et « PartFile », mais cela n’est pas obligatoire car il est hérité de la classe « SolidworksFile ». S’il n’y avait pas d’héritage, l’attribut doit être défini dans chaque classe.

4. Sérialiser

Afin de sérialiser ces classes, 2 bibliothèques systèmes “usings” sont nécessaires pour cela :

  • using IO;
  • using Xml.Serialization;

Pour notre exemple, une méthode est créée dans le fichier « Form1.cs ». Il accepte un objet en tant que paramètre, qui dans cet exemple est « AssemblyFile ».

La méthode a également besoin d’un chemin pour savoir où le fichier doit être enregistré.

Tout d’abord, un fichier doit être créé ou un flux doit être ouvert. L’objet « StreamWriter » est requis pour cela. Le chemin du fichier est spécifié en tant que paramètre pour cet objet et également s’il doit être ajouté au fichier ou non. Dans ce cas, le fichier doit toujours être reconstruit.

En conséquence le sérialiseur XML est nécessaire. Un objet est également initialisé pour cela et le type à sérialiser est requis comme paramètre.

Enfin, en utilisant la méthode « Serialize » du sérialiseur XML, la classe sérialisée peut être enregistrée dans le fichier. Cette méthode est également visible sur la figure 5.

 

5. Générer le XML

Afin de générer un fichier XML avec le code programmé, des données de test sont nécessaires. A cet effet, un assemblage qui contient 4 pièces a été créé. De plus, un objet « AssemblyFile » est créé et de nouvelles instances de l’objet « PartFile » sont simplement ajoutées à la liste. La réalisation de cette étape est visible dans la figure 6.

Après exécution, un fichier XML est enregistré dans le dossier spécifié et devrait ressembler à la figure 7 :

Il se compose de l’élément principal « AssemblyFile » et a les 2 propriétés « FileName » et « Filepath » comme sous-éléments. Une liste « PartFiles » est également un sous-élément, et celui-ci à son tour a le « PartFile » comme sous-élément. Cela peut également être ajusté.

Si le nom et le chemin du fichier doivent être un attribut, le fichier « SolidworksFile » peut être adapté et l’attribut “[XmlAttribute]” peut être écrit à l’aide des deux propriétés, comme le montre la figure 8.

Le fichier XML ressemble alors à la figure 9. Les propriétés peuvent maintenant être vues comme un attribut.

6. Conclusion

Le XMLSerializer de Windows est un outil très puissant et facile à utiliser.

Toutes les classes définies possibles peuvent facilement être stockées et échangées dans un fichier XML. Vous pouvez également définir à quoi doit ressembler le fichier XML, si les propriétés doivent être affichées sous forme d’éléments ou d’attributs. Vous pouvez définir si les propriétés doivent être sérialisées ou non. Puisque le langage XML est une méthode répandue pour l’échange de données, le « XMLSerializer » est un excellent outil et tout le monde devrait le connaître.

Auteur de l'article

Martin Bartolomé, Développeur R&D chez Visiativ Solutions Switzerland

Quoi de neuf dans le monde de la CAO ?

Restez informé grâce à notre fil d’actualités alimenté régulièrement par nos experts métiers : des zooms sur les nouveautés produits, des trucs et astuces, des tutoriels, des témoignages, des top listes, des success stories, des photos et des comptes-rendus des évènements…

Abonnez-vous à notre newsletter: