Entwickler-Ecke

IO, XML und Registry - xml Speicherproblem


bd.cole - Do 06.09.07 08:18
Titel: xml Speicherproblem
Hallo ich habe diese Frage schonmal in einem anderen Forum gestellt, aber keine hilfreiche Antwort bekommen. Ich habe folgendes Problem: Ich hatte eine Klasse zum speichern von xml daten:

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:
public class VerbindungenXML
        {
          
            verbindung _verbindung = new verbindung();


                public verbindung Verbindung
                {
                    get {return _verbindung;}
                    set {_verbindung = value; }
                }
            public VerbindungenXML(){}
        }
        public class verbindung
        {
            string startpoint = String.Empty;
            string endpoint = String.Empty;
            public string StartPoint
            {
                get {return startpoint;}
                set { startpoint = value;}
            }
            public string EndPoint
            {
                get {return endpoint;}
                set { endpoint = value;}
            }

            public verbindung(){}
        }

Ich habe in meiner main klasse das ein Objekt initialisiert und konnte dann Daten speichern mit:

C#-Quelltext
1:
2:
3:
4:
5:
6:
VerbindungenXML verObj = new VerbindungenXML();
XmlTextWriter xmlWriter = new XmlTextWriter(this.xmlVerbindungen, Encoding.UTF8);
                    XmlSerializer serializer = new XmlSerializer(typeof(VerbindungenXML));
                    serializer.Serialize(xmlWriter, verObj);
                    xmlWriter.Close();
verObj.Verbindung.EndPoint = btntmp.Name;

Ich wollte aber mehrere Verbindungen speichern und haben den tipp bekommen die klasse umzuschreiben, dass ich eine Liste habe:

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:
public class VerbindungenXML
        {
          
            List<verbindung> _verbindung = new List<verbindung>();


                public List<verbindung> Verbindung
                {
                    get {return _verbindung;}
                    set {_verbindung = value; }
                }
            public VerbindungenXML(){}
        }
        public class verbindung
        {
            string startpoint = String.Empty;
            string endpoint = String.Empty;
            public string StartPoint
            {
                get {return startpoint;}
                set { startpoint = value;}
            }
            public string EndPoint
            {
                get {return endpoint;}
                set { endpoint = value;}
            }

            public verbindung(){}
        }

Jetzt meine Frage: Wie müssen nun diese Zeilen heißen?
VerbindungenXML verObj = new VerbindungenXML();
verObj.Verbindung.EndPoint = btntmp.Name;
Muss das jetzt irgendwie mit verObj.Verbindung.Add(..) oder so gehen? kann mir einer helfen?
Mfg cole


bd.cole - Do 06.09.07 09:41

Ok habs nach langen probieren jetzt enldihc selber gelöst:
musste nur noch einen Konstruktor meiner Klasse hinzufügen, falls es jemand interessiert:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
public verbindung(string spx, string spy, string epx, string epy, string sb, string eb){
                startpointx = spx;
                startpointy = spy;
                endpointx = epx;
                endpointy = epy;
                startbutton = sb;
                endbutton = eb;
            }


bd.cole - Do 06.09.07 13:21

Habe jetzt ja die geschriebene XML Datei die so aussieht:

XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
- <Verbindung>
  - <verbindung>
    <StartPointX>196</StartPointX
    <StartPointY>265</StartPointY
    <EndPointX>466</EndPointX
    <EndPointY>198</EndPointY
    <StartButton>eingang0</StartButton
    <EndButton>ausgang11</EndButton
  </verbindung>
  - <verbindung>
    <StartPointX>176</StartPointX
    <StartPointY>267</StartPointY
    <EndPointX>162</EndPointX
    <EndPointY>148</EndPointY
    <StartButton>eingang2</StartButton
    <EndButton>ausgang02</EndButton
  </verbindung>
</Verbindung>


Ich habe nun ein Problem, bei dem mir noch keiner Helfen konnte. Nehmen wir an ich kenne den Wert von StartPointX, also 196. Jetzt möchte ich dazu den danzugehörigen wert StartPointY aus der XML Datei lesen, aber wie mach ich das? Weil ich hab ja mehrere StartPointY in der datei.


UGrohne - Do 06.09.07 14:04

Da Du die Klasse serialisierst, kannst Du nicht per XPath das XML-Element suchen. Du musst also in Deiner Klasse eine entsprechende Methode (z.B. FindByStartPointX) implementieren, die die Liste durchgeht und das entsprechende Element heraussucht.

Tipp (ich weiß nicht, ob es da etwas gibt): Schau Dir aber auch mal die Methoden von List<> an (z.B. im Objektbrowser), vielleicht gibt es dort eine Suchmethode, für die Du nur die Verbindungsklasse etwas anpassen musst, sodass Du das mit der List-Implementierung suchen kannst.


bd.cole - Do 06.09.07 14:23

Ok danke der Tip mit der List war sehr gut. Ich glaub ich habs gelöst

C#-Quelltext
1:
2:
               verbindung myLocatedObject = verObj.Verbindung.Find(delegate(verbindung v) { return v.StartButton == eingang.Name.ToString(); });
                string test = myLocatedObject.EndButton;

Mfg Cole