TOC

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

XML:

Writing XML with the XmlDocument class

Nel capitolo precedente, abbiamo parlato del XML usando la classe XmlWriter. Comunque, per alcune situazioni, soprattutto quando si eseguono degli aggiornamenti di file XML esistenti, usare la classe XmlDocument può essere più facile. Dovresti essere consapevole dell' alto consumo di memoria tuttavia, principalmente per documenti XML. Ecco un po' di codice:

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

namespace WritingXml
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlDocument xmlDoc = new XmlDocument();
            XmlNode rootNode = xmlDoc.CreateElement("users");
            xmlDoc.AppendChild(rootNode);

            XmlNode userNode = xmlDoc.CreateElement("user");
            XmlAttribute attribute = xmlDoc.CreateAttribute("age");
            attribute.Value = "42";
            userNode.Attributes.Append(attribute);
            userNode.InnerText = "John Doe";
            rootNode.AppendChild(userNode);

            userNode = xmlDoc.CreateElement("user");
            attribute = xmlDoc.CreateAttribute("age");
            attribute.Value = "39";
            userNode.Attributes.Append(attribute);
            userNode.InnerText = "Jane Doe";
            rootNode.AppendChild(userNode);

            xmlDoc.Save("test-doc.xml");
        }
    }
}

E il risultato dell' XML:

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

Come puoi vedere, questo e un po' più orientato agli oggetti rispetto all' approccio con XmlWriter, e questo richiede un po' più di codice. Quello che facciamo è istanziare un oggetto, il quale lo useremo per creare i nuovi elementi ed attributi, usando i metodi CreateElement() e CreateAttribute(). Ogni volta che lo facciamo, aggiungiamo gli elementi, direttamente al documento, o ad un altro elemento. Puoi vedere questo nell' esempio, dove l' elemento root ("users") è aggiunto direttamente al documento, mentre gli elementi dell' utente sono aggiunti all' elemento root. Gli attributi sono ovviamente aggiunti agli elementi a cui appartengono, usando il metodo Append() sulle proprietà degli attributi . L' intero documento XML viene scritto nel disco nell' ultima linea, dove usiamo il metodo Save().

Ora, come già detto, questo richiede un po' più di codice rispetto a quando usiamo il XmlWriter, ma immagina una situazione dove ti serve solo andare in un documento XML esistente e cambiare pochi valori. Usando l' approccio di XmlWriter, dovrai avere prima da leggere tutte le informazioni usando un XmlReader, salvarlo, cambiarlo, e dopo scrivere l' intera informazione di nuovo usando l' XmlWriter. Perchè l' XmlDocument tiene tutto nella memoria per te, aggiornando un file esistente XML diventa molto più semplice. L' esempio seguente apre il file "test-doc.sml" che abbiamo creato nel capitolo precedente ed aumenta tutte le età di uno. Guarda quanto è facile:

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

namespace WritingXml
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("test-doc.xml");
            XmlNodeList userNodes = xmlDoc.SelectNodes("//users/user");
            foreach(XmlNode userNode in userNodes)
            {
                int age = int.Parse(userNode.Attributes["age"].Value);
                userNode.Attributes["age"].Value = (age + 1).ToString();
            }
            xmlDoc.Save("test-doc.xml");           
        }
    }
}

Carichiamo il file XML e otteniamo tutti i nodi <user>. Dopo iteriamo attraverso loro, leggiamo l' attributo età dentro una variabile intera, e dopo scriviamo il valore sul nodo e sull' attributo, poi aumentiamo il valore di 1. Alla fine, salviamo il documento nello stesso file e se lo apri, vedrai che tutti i nostri utenti avranno un compleanno. Molto figo!

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!