Como escribir un fichero en XML en C#

Hola a todos, hoy os voy a explicar como podemos escribir un fichero XML en C#.

En C# para el tema de XML, tenemos una clase para tratar XML, tanto como leer y escribir. Esta clase es XmlDocument.

El xml que vamos a crear es este:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<concesionario>
    <coches>
        <coche matricula="1111AAA">
            <marca>AUDI</marca>
            <precio>30000</precio>
        </coche>
        <coche matricula="2222BBB">
            <marca>SEAT</marca>
            <precio>10000</precio>
        </coche>
        <coche matricula="3333CCC">
            <marca>BMW</marca>
            <precio>20000</precio>
        </coche>
        <coche matricula="4444DDD">
            <marca>TOYOTA</marca>
            <precio>10000</precio>
        </coche>
    </coches>
</concesionario>

Lo primero es crear una instancia de XmlDocument:

XmlDocument doc = new XmlDocument();

El primer elemento que recomiendo crear es el raíz (antes incluso de la definición del documento), que en nuestro caso es concesionario.

 


XmlElement concesionario = doc.CreateElement("concesionario");
doc.AppendChild(concesionario);

Ahora si vamos a crear la definición del documento XML, le pondremos versión 1 y codificación UTF-8. Lo insertamos antes del elemento padre (concesionario).

XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
doc.InsertBefore(declaration, concesionario);

Ahora vamos a crear el elemento coches, en este caso lo insertamos dentro del elemento raiz concesionario.


XmlElement coches = doc.CreateElement("coches");
concesionario.AppendChild(coches);

Después, vamos a meter elementos coche, lo vamos a hacer por pasos:

 


XmlElement coche = doc.CreateElement("coche");

Le añadimos un atributo matricula:


XmlAttribute matricula1 = doc.CreateAttribute("matricula");
matricula1.Value = "1111AAA";
coche.SetAttributeNode(matricula1);

Añadimos los nodos hijos de coche:


XmlElement marca = doc.CreateElement("marca");
XmlText marcaText1 = doc.CreateTextNode("AUDI");
marca.AppendChild(marcaText1);

XmlElement precio = doc.CreateElement("precio");
XmlText precioText1 = doc.CreateTextNode("30000");
precio.AppendChild(precioText1);

coche.AppendChild(marca);
coche.AppendChild(precio);

Por ultimo añadimos el coche al elemento coches:


coches.AppendChild(coche);

Hago lo mismo con el resto de coches:


// Coche 2

XmlElement coche2 = doc.CreateElement("coche");

XmlAttribute matricula2 = doc.CreateAttribute("matricula");
matricula2.Value = "2222BBB";
coche2.SetAttributeNode(matricula2);

XmlElement marca2 = doc.CreateElement("marca");
XmlText marcaText2 = doc.CreateTextNode("SEAT");
marca2.AppendChild(marcaText2);

XmlElement precio2 = doc.CreateElement("precio");
XmlText precioText2 = doc.CreateTextNode("10000");
precio2.AppendChild(precioText2);

coche2.AppendChild(marca2);
coche2.AppendChild(precio2);

coches.AppendChild(coche2);

// Coche 3

XmlElement coche3 = doc.CreateElement("coche");

XmlAttribute matricula3 = doc.CreateAttribute("matricula");
matricula3.Value = "3333CCC";

coche3.SetAttributeNode(matricula3);

XmlElement marca3 = doc.CreateElement("marca");
XmlText marcaText3 = doc.CreateTextNode("BMW");
marca3.AppendChild(marcaText3);

XmlElement precio3 = doc.CreateElement("precio");
XmlText precioText3 = doc.CreateTextNode("20000");
precio3.AppendChild(precioText3);

coche3.AppendChild(marca3);
coche3.AppendChild(precio3);

coches.AppendChild(coche3);

// Coche 4

XmlElement coche4 = doc.CreateElement("coche");

XmlAttribute matricula4 = doc.CreateAttribute("matricula");
matricula4.Value = "4444DDD";
coche4.SetAttributeNode(matricula4);

XmlElement marca4 = doc.CreateElement("marca");
XmlText marcaText4 = doc.CreateTextNode("TOYOTA");
marca4.AppendChild(marcaText4);

XmlElement precio4 = doc.CreateElement("precio");
XmlText precioText4 = doc.CreateTextNode("10000");
precio4.AppendChild(precioText4);


coche4.AppendChild(marca4);
coche4.AppendChild(precio4);

coches.AppendChild(coche4);

Ya tenemos nuestro XML hecho, pero falta guardarlo en un fichero:


doc.Save("concesionario.xml");

Recordar que se guarda en bin/Debug.

Aqui el resultado:

Os dejo el ejemplo completo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace XML2
{
    class Program
    {
        static void Main(string[] args)
        {

            XmlDocument doc = new XmlDocument();

            XmlElement concesionario = doc.CreateElement("concesionario");
            doc.AppendChild(concesionario);

            XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
            doc.InsertBefore(declaration, concesionario);

            XmlElement coches = doc.CreateElement("coches");
            concesionario.AppendChild(coches);

            // coche 1
            XmlElement coche = doc.CreateElement("coche");

            XmlAttribute matricula1 = doc.CreateAttribute("matricula");
            matricula1.Value = "1111AAA";

            XmlElement marca = doc.CreateElement("marca");
            XmlText marcaText1 = doc.CreateTextNode("AUDI");
            marca.AppendChild(marcaText1);

            XmlElement precio = doc.CreateElement("precio");
            XmlText precioText1 = doc.CreateTextNode("30000");
            precio.AppendChild(precioText1);

            coche.SetAttributeNode(matricula1);

            coche.AppendChild(marca);
            coche.AppendChild(precio);

            coches.AppendChild(coche);

            // Coche 2

            XmlElement coche2 = doc.CreateElement("coche");

            XmlAttribute matricula2 = doc.CreateAttribute("matricula");
            matricula2.Value = "2222BBB";

            XmlElement marca2 = doc.CreateElement("marca");
            XmlText marcaText2 = doc.CreateTextNode("SEAT");
            marca2.AppendChild(marcaText2);

            XmlElement precio2 = doc.CreateElement("precio");
            XmlText precioText2 = doc.CreateTextNode("10000");
            precio2.AppendChild(precioText2);

            coche2.SetAttributeNode(matricula2);

            coche2.AppendChild(marca2);
            coche2.AppendChild(precio2);

            coches.AppendChild(coche2);

            // Coche 3

            XmlElement coche3 = doc.CreateElement("coche");

            XmlAttribute matricula3 = doc.CreateAttribute("matricula");
            matricula3.Value = "3333CCC";

            XmlElement marca3 = doc.CreateElement("marca");
            XmlText marcaText3 = doc.CreateTextNode("BMW");
            marca3.AppendChild(marcaText3);

            XmlElement precio3 = doc.CreateElement("precio");
            XmlText precioText3 = doc.CreateTextNode("20000");
            precio3.AppendChild(precioText3);

            coche3.SetAttributeNode(matricula3);

            coche3.AppendChild(marca3);
            coche3.AppendChild(precio3);

            coches.AppendChild(coche3);

            // Coche 4

            XmlElement coche4 = doc.CreateElement("coche");

            XmlAttribute matricula4 = doc.CreateAttribute("matricula");
            matricula4.Value = "4444DDD";

            XmlElement marca4 = doc.CreateElement("marca");
            XmlText marcaText4 = doc.CreateTextNode("TOYOTA");
            marca4.AppendChild(marcaText4);

            XmlElement precio4 = doc.CreateElement("precio");
            XmlText precioText4 = doc.CreateTextNode("10000");
            precio4.AppendChild(precioText4);

            coche4.SetAttributeNode(matricula4);

            coche4.AppendChild(marca4);
            coche4.AppendChild(precio4);

            coches.AppendChild(coche4);

            doc.Save("concesionario.xml");

            Console.WriteLine("Se ha escrito el XML");

            Console.ReadLine();

        }
    }
}

Os dejo un video explicándolo paso a paso:

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *