TOC

This article has been localized into German by the community.

XML:

XML mit der XmlDocument-Klasse ausgeben

Im vorigen Kapitel haben wir XML mit der XmlWriter-Klasse geschrieben. In einigen Situationen, insbesondere beim Aktualisieren vorhandener XML-Dateien, kann die Verwendung der XmlDocument-Klasse jedoch hilfreich sein. Sie sollten sich jedoch des höheren Speicherverbrauchs bewusst sein, vor allem bei großen XML-Dokumenten. Hier ist ein Code:

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

Das Ergebnis in der XML-Datei.

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

Wie Sie sehen, ist dies etwas objektorientierter als der XmlWriter-Ansatz und erfordert etwas mehr Code. Was wir tun, ist, dass wir ein XmlDocument-Objekt instanziieren, das wir zum Erstellen neuer Elemente und Attribute mithilfe der CreateElement() - und der CreateAttribute() - Methode verwenden. Jedesmal, wenn wir das tun, hängen wir die Elemente entweder direkt an das Dokument oder an ein anderes Element an. Sie sehen dies in dem Beispiel, in dem das Stammelement ("Benutzer") direkt an das Dokument angehängt wird, während die Benutzerelemente an das Stammelement angehängt werden. Attribute werden natürlich an die Elemente angehängt, zu denen sie gehören. Dazu wird die Append() - Methode der Attributes-Eigenschaft verwendet. Das gesamte XML-Dokument wird in der letzten Zeile auf die Festplatte geschrieben, wo wir die Save() -Methode verwenden.

Wie bereits erwähnt, erfordert dies etwas mehr Code als bei der Verwendung von XmlWriter. Stellen Sie sich jedoch eine Situation vor, in der Sie nur in ein vorhandenes XML-Dokument einsteigen und einige Werte ändern müssen. Bei Verwendung des XmlWriter-Ansatzes müssten Sie zunächst alle Informationen mit einem XmlReader lesen, speichern, ändern und dann die gesamten Informationen mit dem XmlWriter zurückschreiben. Da das XmlDocument alles für Sie speichert, wird das Aktualisieren einer vorhandenen XML-Datei wesentlich einfacher. Das folgende Beispiel öffnet die Datei "test-doc.xml", die wir im vorherigen Kapitel erstellt haben, und erhöht das Alter jedes Benutzers um eins. Sehen Sie, wie einfach es ist:

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

Wir laden die XML-Datei und fragen nach allen <user> Knoten. Wir durchlaufen sie dann, lesen das age-Attribut (Alter-Attribute) in eine Integer-Variable und schreiben den Wert zurück in den Knoten und das Attribut, nachdem wir den Wert um 1 erhöht haben. Als letztes speichern wir das Dokument wieder in derselben Datei und wenn Sie dies tun und es wieder öffnen, werden Sie sehen, dass alle Benutzer gerade Geburtstag hatten. Ziemlich cool!


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!