Autor Beitrag
Crusher87
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 19.07.18 12:04 
Hallo zusammen,

da ich langsam am verzweifeln bin, frag ich einfach nach Hilfe.

Ich möchte ein XML- Datei auslesen und in eine Listbox schreiben.

Leider erhalte ich den Fehler System.InvalidOperationException: "Fehler im XML-Dokument (2,2)."

Anbei meine Codes:


Zum schreiben:

Main Window:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
System.Xml.Serialization.XmlSerializer xmlserializer = new System.Xml.Serialization.XmlSerializer(typeof(List<Messwerte>));
List<Messwerte> listeMesswerte = new List<Messwerte>();
StreamWriter sw = new StreamWriter(filename_puffer);
listeMesswerte.Add(new Messwerte { nummer = Convert.ToString(n), date = Convert.ToString(DateTime.Now), Messwert_H9_5 = Robi_.NumReg[51], Messwert_H11 = Robi_.NumReg[52], Messwert_H13_8 = Robi_.NumReg[53], Messwert_H16 = Robi_.NumReg[54], Messwert_H18 = Robi_.NumReg[55], Messwert_H20 = Robi_.NumReg[56], Messwert_H23_8 = Robi_.NumReg[57], Messwert_H28 = Robi_.NumReg[58], Messwert_H29 = Robi_.NumReg[59]});
xmlserializer.Serialize(sw, listeMesswerte);
sw.Close();


Klasse:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
public class Messwerte
    {
        [XmlAttribute("Nummer")]
        public string nummer
        {
            get;
            set;
        }

        [XmlElement("DatumZeit")]
        public string date
        {
            get;
            set;
        }

        [XmlElement("Messwert_H9_5")]
        public string Messwert_H9_5
        {
            get;
            set;
        }

        [XmlElement("Messwert_H11")]
        public string Messwert_H11
        {
            get;
            set;
        }

        [XmlElement("Messwert_H13_8")]
        public string Messwert_H13_8
        {
            get;
            set;
        }

        [XmlElement("Messwert_H16")]
        public string Messwert_H16
        {
            get;
            set;
        }

        [XmlElement("Messwert_H18")]
        public string Messwert_H18
        {
            get;
            set;
        }

        [XmlElement("Messwert_H20")]
        public string Messwert_H20
        {
            get;
            set;
        }

        [XmlElement("Messwert_H23_8")]
        public string Messwert_H23_8
        {
            get;
            set;
        }

        [XmlElement("Messwert_H28")]
        public string Messwert_H28
        {
            get;
            set;
        }

        [XmlElement("Messwert_H29")]
        public string Messwert_H29
        {
            get;
            set;
        }
    }



XML-Datei (Bsp:)
ausblenden volle Höhe XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
<?xml version="1.0" encoding="UTF-8"?>

-<ArrayOfMesswerte xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

-<Messwerte Nummer="1">

<DatumZeit>19.07.2018 11:35:36</DatumZeit>

<Messwert_H9_5>6</Messwert_H9_5>

<Messwert_H11>7,002096</Messwert_H11>

<Messwert_H13_8>7,0024</Messwert_H13_8>

<Messwert_H16>7,0024</Messwert_H16>

<Messwert_H18>7,002501</Messwert_H18>

<Messwert_H20>7,002501</Messwert_H20>

<Messwert_H23_8>7,001994</Messwert_H23_8>

<Messwert_H28>7,001994</Messwert_H28>

<Messwert_H29>7,095992</Messwert_H29>

</Messwerte>


-<Messwerte Nummer="2">

<DatumZeit>19.07.2018 11:36:36</DatumZeit>

<Messwert_H9_5>1</Messwert_H9_5>

<Messwert_H11>7,002096</Messwert_H11>

<Messwert_H13_8>7,0024</Messwert_H13_8>

<Messwert_H16>7,0024</Messwert_H16>

<Messwert_H18>7,002501</Messwert_H18>

<Messwert_H20>7,002501</Messwert_H20>

<Messwert_H23_8>7,001994</Messwert_H23_8>

<Messwert_H28>7,001994</Messwert_H28>

<Messwert_H29>7,095992</Messwert_H29>

</Messwerte>

</ArrayOfMesswerte>



Zum Lesen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
XmlSerializer xmlserializer = new XmlSerializer(typeof(List<Messwerte_>));
        List<Messwerte_> listeMesswerte = new List<Messwerte_>();
datum_ = Convert.ToString(listBoxDatum.SelectedItem);
            StreamReader sr = new StreamReader("...\\Messwerte\\" + Ordner + "\\" + Maschine + "\\" + datum_ + "_Messwerte_" + Convert.ToString(listBoxTeile.SelectedItem) + "_P_" + ".xml");
            listeMesswerte = (List<Messwerte_>)xmlserializer.Deserialize(sr);
            Anzahl_Messergebnisse = (listeMesswerte[listeMesswerte.Count - 1].nummer);
            labelAnzahl.Content = Anzahl_Messergebnisse;
            sr.Close();

            foreach (Messwerte_ messwerte in listeMesswerte)
            {
                Nummer = messwerte.nummer;
                datum = messwerte.date.Remove(011);

                Messwert_13_9 = messwerte.Messwert_H9_5;
                Messwert_14_9 = messwerte.Messwert_H11;
                Messwert_15_9 = messwerte.Messwert_H13_8;
                Messwert_16_9 = messwerte.Messwert_H16;


                Abstand();

                listbox_Gesamttext = Nummer + Abstand_1 + datum + Abstand_2 + Messwert_13_9 + Abstand_2 + Messwert_14_9 + Abstand_2 + Messwert_15_9 + Abstand_2 + Messwert_16_9;
                listBoxMesswerte.Items.Add(listbox_Gesamttext);
            }


Klasse:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
public class Messwerte_
    {
        [XmlAttribute("Nummer")]
        public string nummer
        {
            get;
            set;
        }

        [XmlElement("DatumZeit")]
        public string date
        {
            get;
            set;
        }

        [XmlElement("Messwert_H9_5")]
        public string Messwert_H9_5
        {
            get;
            set;
        }

        [XmlElement("Messwert_H11")]
        public string Messwert_H11
        {
            get;
            set;
        }

        [XmlElement("Messwert_H13_8")]
        public string Messwert_H13_8
        {
            get;
            set;
        }

        [XmlElement("Messwert_H16")]
        public string Messwert_H16
        {
            get;
            set;
        }

        [XmlElement("Messwert_H18")]
        public string Messwert_H18
        {
            get;
            set;
        }

        [XmlElement("Messwert_H20")]
        public string Messwert_H20
        {
            get;
            set;
        }

        [XmlElement("Messwert_H23_8")]
        public string Messwert_H23_8
        {
            get;
            set;
        }

        [XmlElement("Messwert_H28")]
        public string Messwert_H28
        {
            get;
            set;
        }

        [XmlElement("Messwert_H29")]
        public string Messwert_H29
        {
            get;
            set;
        }
    }



Kann mir jemand helfen? Was mache ich falsch?
Danke im Voraus?

Moderiert von user profile iconTh69: Titel geändert: "Serialisierung:" hinzugefügt
Moderiert von user profile iconMathematiker: Name aus Verzeichnis entfernt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4275
Erhaltene Danke: 917

Win10
C#, C++ (VS 2015/17)
BeitragVerfasst: Do 19.07.18 12:24 
Hallo und :welcome:,

warum hast du zwei verschiedene Klassen für die Messwerte?

Und sind die Minuszeichen am Anfang mancher Zeilen in der XML-Datei wirklich vorhanden oder nur hier im Forumsbeitrag?

PS: Und du solltest deinen Code besser strukturieren und das Serialisieren (Lesen, Schreiben) in eigene (Logik-)Klassen auslagern (Trennung von UI und Logik).
Crusher87 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 19.07.18 13:04 
Hallo,

es sind zwei Klassen, weil es 2 verschiedene Programme sind.

Das Programm zum Schreiben ist auf einem PC an einer Maschine.
Das Programm zum Lesen sollen alle über den Server können.

Die Minus-zeichen sind nur hier im Forumsbeitrag vorhanden.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4275
Erhaltene Danke: 917

Win10
C#, C++ (VS 2015/17)
BeitragVerfasst: Do 19.07.18 14:54 
Dann sollten aber auch beide Klassen gleich heißen bzw. bei den Klassen das gleiche XmlTypeAttribute angegeben sein (s.a. Attributes That Control XML Serialization) - evtl. auch noch XmlRootAttribute.

In der XML-Datei steht ja explizit ArrayOfMesswerte (und nicht ArrayOfMesswerte_).

Noch besser wäre es wohl, wenn die (eine) Klasse nur in genau einer Assembly definiert ist - und diese dann von beiden Projekten referenziert wird (und dann könnten dadrin dann auch beide Methoden zum Lesen und Speichern enthalten sein - mit entsprechenden Parametern).
Crusher87 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 19.07.18 15:10 
super.
Vielen Dank