TOC

This article is currently in the process of being translated into French (~43% 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.

Here's an example of writing XML using the XmlWriter class:

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();
        }
    }
}

The above code will create the following XML:

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

So, we start by creating an instance of the XmlWriter class. It takes at least one parameter, in this case the path to where the XML should be written, but comes in many variations for various purposes. The first thing we should do is to call the WriteStartDocument() method. After that, we write a start element called "users". The XmlWriter will translate this into <users>. Before closing it, we write another start element, "user", which will then become a child of "users". We then proceed to adding an attribute (age) to the element, using the WriteAttributeString() method, and then we write the inner text of the element, by calling the WriteString() method. We then make sure to close the first "user" element with a call to the WriteEndElement() method.

This process is repeated to add another user, except that we don't call WriteEndElement() like we did before. In fact, it should be called twice, since we have an open "users" element too, but the XmlWriter will do that for us when we call the WriteEndDocument() method.

To get the XmlWriter to write our data to the disk, we call the Close() method. You can now open the file, "test.xml", in the same directory where the EXE file of your project is, usually in the bin\debug directory.

And that's really all it takes to write a simple XML file. In the next chapter, we will do the same, but using the XmlDocument class.

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!