Autor Beitrag
bd.cole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 46

Win XP, Vista
C# (VS 2005)
BeitragVerfasst: Do 06.09.07 08:18 
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:
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:
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:
ausblenden 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:
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:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 46

Win XP, Vista
C# (VS 2005)
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 46

Win XP, Vista
C# (VS 2005)
BeitragVerfasst: Do 06.09.07 13:21 
Habe jetzt ja die geschriebene XML Datei die so aussieht:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 46

Win XP, Vista
C# (VS 2005)
BeitragVerfasst: Do 06.09.07 14:23 
Ok danke der Tip mit der List war sehr gut. Ich glaub ich habs gelöst
ausblenden C#-Quelltext
1:
2:
               verbindung myLocatedObject = verObj.Verbindung.Find(delegate(verbindung v) { return v.StartButton == eingang.Name.ToString(); });
                string test = myLocatedObject.EndButton;

Mfg Cole