Laden...

Vorgehensweise beim erstellen von Xml Datei

Erstellt von Rainer Wein vor 14 Jahren Letzter Beitrag vor 14 Jahren 809 Views
R
Rainer Wein Themenstarter:in
90 Beiträge seit 2008
vor 14 Jahren
Vorgehensweise beim erstellen von Xml Datei

Hallo zusammen,

ich möchte gern Messwert die ich auslese in eine Xml Datei exportieren.
Da diese Messwert ohne die jeweiligen Messeinstellungen nichtssagend sind muss ich außerdem aus meinem Programm verschiedene Einstellungen von ComboBoxen, CheckBoxen usw. mit in die Xml schreiben. Ich wollte dabei alle, auch für die Messung irrelevante Werte aufnehmen. Die Elemente die nicht genutzt wurden wollte ich dann leer lassen.

Wie gehe ich dabei am besten vor?

Erzeuge ich mir dafür vielleicht ein Objekt und serialisiere es dann,

oder erzeuge ich das xml Dokument direkt in einer Klasse,


XmlDocument doc = new XmlDocument();
XmlNode myRoot, myNode;
XmlAttribute myAttribute;
 
myRoot = doc.CreateElement("AppendChild");
doc.AppendChild(myRoot);
 
myNode = doc.CreateElement("Child1");
myNode.InnerText = CheckBoxText;

3.170 Beiträge seit 2006
vor 14 Jahren

Hallo,

ich würde versuchen es über Serialsierung zu lösen wenn möglich.
Dann spart man sich das Knoten-Gefummel mit dem XML... 8)

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

2.223 Beiträge seit 2005
vor 14 Jahren

Hallo Rainer Wein,

denke auch das Serialisierung der einfachste und schönste Weg für dein Vorhaben ist

komplette Struktur an einer Stelle
einfaches importieren mittels Deserialisierung, um die ganzen Daten auch wieder anzuzeigen.

freundliche Grüße
Lars

R
Rainer Wein Themenstarter:in
90 Beiträge seit 2008
vor 14 Jahren

Danke vielmals,
ich hab es jetzt mal mit der Serialisierung versucht, bin mir aber nicht sicher ob das alles so richtig ist.
Übrigens müssen die Daten nur exportiert werden, die Verarbeitung wird in einem anderen Programm stattfinden.

Code der Form1 mit einer ComboBox und einem NumericUpDown ( Testweise )


public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void export_Click(object sender, EventArgs e)
        {
            xmlExport export = new xmlExport();
            einstellungen e1 = new einstellungen(this);
            werte w1 = new werte(this);

            export._einstellungen1 = e1;
            export._werte1 = w1;

            XmlSerializer serializer = new XmlSerializer(typeof(xmlExport));
            FileStream fs = new FileStream("test.xml", FileMode.Create);
            serializer.Serialize(fs, export);
            fs.Close();
            export = null;
        }

        public string _comboBoxItem
        {
            get { return comboBox1.SelectedItem.ToString(); }
        }

        public decimal _numericValue
        {
            get { return numericUpDown1.Value; }
        }
    }

und meine Xml Struktur


[XmlRoot("TestXml")]
    public class xmlExport
    {
        [XmlElement("Einstellungen")]
        public einstellungen _einstellungen1;
        [XmlElement("Werte")]
        public werte _werte1;

        public xmlExport() { }
    }

    public class einstellungen
    {
        [XmlElement("Element")]
        public string element;
        [XmlAttribute("ID", DataType = "int")]
        public int id;

        public einstellungen(Form1 _form1)
        {
            this.element = _form1._comboBoxItem;
            this.id = 1;
        }

        public einstellungen() { }
      }
    public class werte
    {
        [XmlElement("Wert")]
        public string wert;
        [XmlAttribute("value", DataType = "decimal")]
        public decimal value;

        public werte(Form1 _form1)
        {
            this.wert = "1";
            this.value = _form1._numericValue;
        }

        public werte() { }
    }

  1. Ist diese Vorgensweise so korrekt?
  2. Ich benötige ja Daten aus meiner Form1, gibt es noch andere Möglichkeiten um die Daten der Controls zu übergeben? Ich habe ehrlich gesagt keine Lust für alle benötigten Controls getter zu erstellen.
L
8 Beiträge seit 2010
vor 14 Jahren

Hallo Rainer,

ich glaube zwar, du hast dich bereits auf die Objekt-Variante eingeschossen, aber dennoch:

Ich mache sowas vorzugsweise mit DataSets. Die lassen sich auch prima in .xml serialisieren und deserialisieren. Weiterhin hast Du die Möglichkeit mehrere Messungen in einem Ritt zu speichern/laden und Du kannst im DataSet mit SQL-Befehlen ziemlich schnell einzelne Werte finden. Wenn Dir SQL nicht gefällt, kannst Du das DataSet auch ähnlich wie ein Array zum lesen/schreiben ansprechen.
Außerdem kannst Du das Serialisierte DataSet - also die -xml Datein direkt mit Excel öffnen (und wahrscheinlich auch mit einigen anderen Datenbankanwendungen).

Trotzdem auch weiterhin viel Spaß