TOC

This article is currently in the process of being translated into French (~98% done).

XML:

Writing XML with the XmlWriter class

Dans les chapitres précédents, nous avons vu comment lire du XML, mais il est temps maintenant d'en commencer également l'écriture. Dans la mesure où le XML se présente sous forme de texte, on pourrait commencer par écrire les balises XML dans un fichier et lui donner l'extension .xml, mais c'est plus facile et plus sûr de laisser le .NET framework s'en occuper ; tout comme avec la lecture du XML, il y a au moins deux différentes options: L'approche XmlWriter et l'approche XmlDocument . Cet article mets le focus sur la première approche, puis on regardera au chapitre suivant comment écrire du XML selon l'approche XmlDocument.

La différence entre les deux est cette fois encore liée au volume mémoire utilisée - XmlWriter utilise moins de mémoire que XmlDocument, ce qui n'est toutefois un inconvénient que lorsque l'on écrit de très gros fichiers. Une autre différence importante est qu'en utilisant XmlDocument, on peut lire un fichier existant, le travailler et réécrire dessus les modifications. Avec XmlWriter, on doit réécrire la totalité du document du début jusqu'à la fin à chaque fois. Cependant cela n'est pas nécessairement un problème, et comme toujours, ce choix découle en pratique de la situation dans laquelle on se trouve et de ses préférences personnelle.

Voici un exemple d'écriture XML utilisant la classe XmlWriter :

using System;
using System.Text;
using System.Xml;

namespace WritingXml
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlWriter xmlWriter = XmlWriter.Create("test.xml");

            xmlWriter.WriteStartDocument();
            xmlWriter.WriteStartElement("users");

            xmlWriter.WriteStartElement("user");
            xmlWriter.WriteAttributeString("age", "42");
            xmlWriter.WriteString("John Doe");
            xmlWriter.WriteEndElement();

            xmlWriter.WriteStartElement("user");
            xmlWriter.WriteAttributeString("age", "39");
            xmlWriter.WriteString("Jane Doe");

            xmlWriter.WriteEndDocument();
            xmlWriter.Close();
        }
    }
}

Le code ci-dessus va créer le XML suivant :

<users>
  <user age="42">John Doe</user>
  <user age="39">Jane Doe</user>
</users>

Ainsi, nous commençons en créant une instance de la classe XmlWriter. Cela nécessite au moins un paramètre, dans ce cas le chemin où le XML doit être écrit, mais il existe de nombreuses variations pour des buts différents. La première chose à faire est d'appeler la méthode WriteStartDocument(). Après ça, nous écrivons un élément de d départ, appelé "users". Le XmlWriter traduira ceci en &It;users>. Avant de le refermer, nous écrivons un autre élément de départ "user" qui deviendra alors un enfant de "users". Nous avons alors procédé à l'ajout d'un attribut (age) à l'élément, en utilisant la méthode WriteAttributeString(), puis nous écrivons le texte entrant (inner text) de l'élément, par l'appel à la méthode WriteString(). Nous nous assurons alors de fermer le premier élément "user" par un appel à la méthode WriteEndElement().

Ce processus est répété pour ajouter un autre utilisateur, sauf que nous n'appelons pas WriteEndElement() comme nous l'avons fait avant. En fait, il doit être appelé deux fois, depuis que nous avons déjà un élément "users" ouvert, mais le XmlWriter fera ça pour nous quand nous appellerons la méthode WriteEndDocument().

Pour que le XmlWriter écrive nos données sur le disque, nous appelons la méthode Close(). Nous pouvons désormais ouvrir le fichier, "test.xml", dans le même répertoire où se trouve le fichier EXE de votre projet, habituellement dans le répertoire bin\debug.

Et c'est vraiment tout ce qu'il est nécessaire de faire, pour écrire un simple fichier XML. Dans le chapitre suivant, nous ferons de même, mais en utilisant la classe XmlDocument.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!