Zum Inhalt springen

Arbeiten mit .NET: Zugriff auf Dateien/ Xml-Dateien/ Überblick

Aus Wikibooks

Für XML gibt es in C# auch eine eigene Klasse, im Folgenden wird nur ein sehr kleiner Teil in deren Funktionsvielfalt beleuchtet:

using System;
using System.Xml;

namespace xml_test
{
  class Program
  {
    public static void Main(string[] args)
    {
      XmlDocument xml = new XmlDocument();
      //Erstellen eines neuen Objektes der XML-Klasse
      xml.Load("test.xml");
      //Laden einer XML-Datei
      
      Console.WriteLine(xml.SelectNodes("test/erste")[0].Attributes["att"].Value);
      //Wähle den Tag "erste", erstes Vorkommen (Index: 0), Attribut "att"
      //Ausgabe: "Attribut"
      
      Console.WriteLine(xml.SelectNodes("test/erste/zweite")[1].InnerText);
      //Mit "InnerText" geben wir den Text zwischen den Tags aus.
      //Ausgabe: "Hallo"
      
      Console.WriteLine(xml.SelectNodes("test/erste")[1].SelectNodes("zweite")[0].InnerText);
      //Man kann auch erstmal einen Knoten wählen, den Index angeben und dann einen weiteren wählen.
      //Ausgabe: "Welt!"
      
      Console.WriteLine(xml.SelectNodes("test/erste")[0].InnerXml);
      //Mit InnerXml geben wir den gesamten Inhalt zwischen den Tags aus.
      //Ausgabe: "<zweite leer="Leeres Element"/><zweite>Hallo</zweite>"
      
      //Jetzt ändern wir etwas:
      xml.SelectNodes("test/erste/zweite")[0].Attributes["leer"].Value = "Volles Element :)";
      //Man kann Value, genauso wie InnerText, InnerXml,... einfach ändern.
      
      Console.WriteLine(xml.SelectNodes("test/erste/zweite")[0].OuterXml);
      //Mit OuterXml kann man den gesamten Tag ausgeben.
      //Ausgabe: "<zweite leer="Volles Element :)"/>"
      
      xml.SelectNodes("test/erste/zweite")[0].InnerText = "Jetzt muss schnell was da rein, damit es stimmt!";
      //Leeren Elementen kann man auch so Text zuweisen.
      
      xml.Save("test2.xml");
      //Jetzt noch (in unserem Fall unter anderem Namen) speichern, damit die Änderungen
      //wirksam werden. Es müsste jetzt eine test2.xml mit den oben beschriebenen Änderungen
      //erstellt worden sein.
      
      Console.ReadLine();
    }
  }
}

Inhalt der test.xml:

<?xml version="1.0" encoding="utf-8"?>
<test>
  <erste att="Attribut">
    <zweite leer="Leeres Element"/>
    <zweite>Hallo</zweite>
  </erste>
  <erste>
    <zweite>Welt!</zweite>
  </erste>
</test>

Inhalt der test2.xml nach der Ausführung:

<?xml version="1.0" encoding="utf-8"?>
<test>
  <erste att="Attribut">
    <zweite leer="Volles Element :)">Jetzt muss schnell was da rein, damit es stimmt!</zweite>
    <zweite>Hallo</zweite>
  </erste>
  <erste>
    <zweite>Welt!</zweite>
  </erste>
</test>