Entwickler-Ecke
IO, XML und Registry - XML Verschachtelung
bd.cole - Di 28.08.07 08:30
Titel: XML Verschachtelung
Hallo ich lese aus textboxen text für meine xml datei aus. klappt auch alles prima. Wird auch dort rein geschrieben. Aber wie geb ich die Form an, in der er schreiben soll, also würde es gerne verschachteln, dass es z. B. so aussieht:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| - <blub> <bla>aa</bla> <bla2>####</bla2> - <Adresse> - <MeineAdresse> <str>xxxxxx</str> <hausnr>20</hausnr> <plz>987087</plz> <ka>99</ka> </MeineAdresse> </Adresse> </blub> |
Habe eine Serlializationclass. Ich würde gerne in dieser schon die Form festlegen und später nur noch den text aus den textboxen dazufügen. Meine Klasse:
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:
| private string bla = String.Empty; private string bla2 = String.Empty; private string str = String.Empty; private string hausnr = String.Empty; private string plz = String.Empty; private string ka = String.Empty;
public string Bla { get { return bla; } set { bla = value; } } public string Bla2 { get { return bla2; } set { bla2 = value; } } public string Str { get { return str; } set { str = value; } } public string Hausnr { get { return hausnr; } set { hausnr = value; } } |
Christian S. - Di 28.08.07 13:56
Wenn Du den XML-Serializer verwenden willst, musst Du die Struktur mit Deinem Klassen nachbilden.
Also wenn Du das hier hast:
XML-Daten
1: 2: 3: 4:
| <MeineAdresse> <Strasse>...</Strasse> <PLZ>...</PLZ> </MeineAdresse> |
musst Du Deine Klasse so bauen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| public class MeineAdresse { private string strasse; public string Strasse { get {return strasse;} set {strasse = value;} } private string plz; public string PLZ{ get {return plz;} set {plz= value;} } |
Wenn Du weitere Verschachtelungen haben willst, musst Du Properties anlegen, die Instanzen weiterer Klassen sind:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| public class Person { private string name; public string Name{ get {return name;} set {name= value;} }
private MeineAdresse adresse; public MeineAdresse Adresse{ get {return adresse;} set {adresse= value;} } } |
ergibt:
XML-Daten
1: 2: 3: 4: 5: 6: 7:
| <Person> <Name>...</Name> <Adresse> <Strasse>...</Strasse> <PLZ>...</PLZ> </Adresse> </Person> |
P.s.: Ich weiß, Khabarakh war schneller, aber ich hab mehr Infos drin ;-)
bd.cole - Mi 29.08.07 07:19
erstmal Danke. Hab noch ein Problem. Ich hatte mir ein Object erstellt:
C#-Quelltext
1:
| private Person serObj = new Person(); |
Ich habe dann den eingegebenen Text einer textbox gespeichert:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| for (int i = 3; i < 7; i++) eingabe = eingabe + maskedTextBox16.Text[i]; serObj.strasse = eingabe; XmlTextWriter xmlWriter = new XmlTextWriter(this.xmlMeldungen, Encoding.UTF8); XmlSerializer serializer = new XmlSerializer(typeof(SerializationClass)); serializer.Serialize(xmlWriter, serObj); xmlWriter.Close(); |
Das geht jetzt natürlcih nicht mehr. Wie speicher ich das jetzt in dem Objekt? Muss ja irgendwie serObj.Adresse.strasse oder so? Es kommt der Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
JüTho - Mi 29.08.07 08:35
bd.cole hat folgendes geschrieben: |
| Es kommt der Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt. |
Bei den vorherigen Ratschlägen wurde gesagt:
Christian S. hat folgendes geschrieben: |
| Wenn Du weitere Verschachtelungen haben willst, musst Du Properties anlegen, die Instanzen weiterer Klassen sind: |
Deine Fehlermeldung lässt mich vermuten, dass im Konstruktor von Person das Erzeugen der "Instanzen weiterer Klassen" fehlt.
Gruß Jürgen
bd.cole - Mi 29.08.07 14:37
Lesen Hilft, Danke. Hat funktioniert. Geht nun alles
bd.cole - Do 30.08.07 09:40
Ok das mit dem Anlegen der XML hat Prima geklappt, aber wie kann ich jetzt einzelne Strings wieder auslesen aus der Datei? Z. B. jetzt strasse?
bd.cole - Do 30.08.07 09:47
Ah ok geht genauso nur mit Xmlreader anstat writer
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!