myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Ungelesen 24.02.13, 10:41   #1
ipulf2
Anfänger
 
Benutzerbild von ipulf2
 
Registriert seit: Mar 2012
Beiträge: 42
Bedankt: 1
ipulf2 ist noch neu hier! | 0 Respekt Punkte
Standard C# & xml

Hi

ich habe ein kleines problem mit xml datein.
Ich möchte Pfade (48 * 32) sortiert in einer xml-Datei speichern.

allerdings werden bei mir immer nur die letzten beiden erstellt.

Hat dafür jmd eine lösung?

Code:
for (int i = 1; i < 49; i++)
                {
                    for (int j = 1; j < 33; j++)
                    {
                        XmlDocument doc = new XmlDocument();
                        XmlNode myRoot, myNode;

                       
                        myRoot = doc.CreateElement("icon"+j);
                        doc.AppendChild(myRoot);

                        myNode = doc.CreateElement("gp"+i+"_image");
                        myNode.InnerText = "";
                        myRoot.AppendChild(myNode);

                        myNode = doc.CreateElement("gp"+i+"_shortcut");
                        myNode.InnerText = "";
                        myRoot.AppendChild(myNode);

                        doc.Save(@"\icons.xml");
                        
                    }
                }
So sieht die xml-Datei dann aus:

Code:
<icon32>
  <gp48_image>
  </gp48_image>
  <gp48_shortcut>
  </gp48_shortcut>
</icon32>
MfG ipulf2
ipulf2 ist offline   Mit Zitat antworten
Ungelesen 24.02.13, 12:01   #2
Robar666
Anfänger
 
Registriert seit: Apr 2012
Beiträge: 43
Bedankt: 16
Robar666 ist noch neu hier! | 0 Respekt Punkte
Standard

Weil du immer ein neues XmlDocument erstellst und dadurch die alten Inhalte überschreibst.

XmlDocument doc = new XmlDocument(); ausserhalb der schleife erzeugen.
Robar666 ist offline   Mit Zitat antworten
Ungelesen 24.02.13, 12:22   #3
ipulf2
Anfänger
 
Benutzerbild von ipulf2
 
Registriert seit: Mar 2012
Beiträge: 42
Bedankt: 1
ipulf2 ist noch neu hier! | 0 Respekt Punkte
Standard

Hier der neue code

Code:
XmlDocument doc = new XmlDocument();
                XmlNode myRoot, myNode;
                for (int i = 1; i < 49; i++)
                {
                    for (int j = 1; j < 33; j++)
                    {
                        

                       
                        myRoot = doc.CreateElement("icon"+j);
                        doc.AppendChild(myRoot);

                        myNode = doc.CreateElement("gp"+i+"_image");
                        myNode.InnerText = "";
                        myRoot.AppendChild(myNode);

                        myNode = doc.CreateElement("gp" + i + "_shortcut");
                        myNode.InnerText = "";
                        myRoot.AppendChild(myNode);
                        
                        doc.Save(@"C:\icons.xml");
                        
                        
                        
                        
                    }
                }
und die neue xml:

Code:
<icon1>
  <gp1_image>
  </gp1_image>
  <gp1_shortcut>
  </gp1_shortcut>
</icon1>
Funktioniert leider immer noch nicht

edit: Das doc.save außerhalb der schleife zu packen habe ich ebenfalls versucht (die xml wird dann nicht mehr erstellt).
ipulf2 ist offline   Mit Zitat antworten
Ungelesen 24.02.13, 13:53   #4
Robar666
Anfänger
 
Registriert seit: Apr 2012
Beiträge: 43
Bedankt: 16
Robar666 ist noch neu hier! | 0 Respekt Punkte
Standard

Code:
  XmlDocument doc = new XmlDocument();
  for (int i = 1; i < 49; i++)          {
    for (int j = 1; j < 33; j++)              {
      XmlNode myRoot = doc.CreateElement("icon"+j);
      doc.AppendChild(myRoot);

      XmlNode myNode1 = doc.CreateElement("gp"+i+"_image");
      myNode1.InnerText = "";
      myRoot.AppendChild(myNode1);

      XmlNode myNode2 = doc.CreateElement("gp" + i + "_shortcut");
      myNode2.InnerText = "";
      myRoot.AppendChild(myNode2);   
    }
  }
  doc.Save(@"C:\icons.xml");
Probier das mal.
vorher hast du immer nur 2 Objekte für die XML Knoten gehabt (myRoot und myNode), diese sind zwar immer mit doc.CreateElement überschrieben worden, jedoch weiß ich nicht was die Methode "CreateElement" genau macht (kann sein das er nicht ein neues Objekt erzeugt), dadurch wurden womöglich die alten objekte überschrieben und keine neuen XML-Knoten hinzugefügt.
Robar666 ist offline   Mit Zitat antworten
Ungelesen 24.02.13, 14:46   #5
ipulf2
Anfänger
 
Benutzerbild von ipulf2
 
Registriert seit: Mar 2012
Beiträge: 42
Bedankt: 1
ipulf2 ist noch neu hier! | 0 Respekt Punkte
Standard

konnte nun alles lösen vielen dank für die Hilfe

Wenn erneut Probleme auftreten werde ich diese in diesem theard posten :P
ipulf2 ist offline   Mit Zitat antworten
Ungelesen 24.02.13, 16:43   #6
ProgMaster
Banned
 
Registriert seit: Mar 2012
Beiträge: 337
Bedankt: 93
ProgMaster ist noch neu hier! | 0 Respekt Punkte
Standard

Oh Gott... verwende doch die XML-Attributes und den XMLSerializer und Du brauchst keine einzige Zeile programmieren!
ProgMaster ist offline   Mit Zitat antworten
Ungelesen 25.02.13, 16:16   #7
ipulf2
Anfänger
 
Benutzerbild von ipulf2
 
Registriert seit: Mar 2012
Beiträge: 42
Bedankt: 1
ipulf2 ist noch neu hier! | 0 Respekt Punkte
Standard

Hast du ein Beispiel dafür?

Kann mir nicht vorstellen wie sich das von selbst dort hinein laden soll^^
ipulf2 ist offline   Mit Zitat antworten
Ungelesen 25.02.13, 18:07   #8
NetWebs
Banned
 
Registriert seit: Aug 2012
Beiträge: 223
Bedankt: 68
NetWebs ist noch neu hier! | 0 Respekt Punkte
Standard

@ipulf2,

Du solltest Dich mal in Objekt-orientiere Programmierung einlesen.
C# ist z.B. eine Objekt-orientiere Programmiersprache, und der Sinn solcher Sprache ist es, eben objekt-orientiert zu programmieren.

Das was Du machst ist prozedurale Programmierung. Die Vorteile der OOP können so also nicht zur Geltung kommen. Würdst Du nach OOP-Kritieren programmieren, dann würdest Du Dein Icon als Objekt beschreiben mit den entsprechenden Membern (image, shortcut). Dann fügst Du noch Attribute (Annotations!) hinzu, die beschreiben, wie das Objekt in XML serialisiert werden soll.

Damit brauchst Du KEINE EINZIGE Zeile programmieren, weil Du eben die OOP-Vorteile verwendest.

(Btw... Du solltest Dich schon selbst fragen, wieso Du eine OO-Programmiersprache verwendst, aber prozedural programmierst...!!!)
NetWebs ist offline   Mit Zitat antworten
Ungelesen 25.02.13, 21:39   #9
Robar666
Anfänger
 
Registriert seit: Apr 2012
Beiträge: 43
Bedankt: 16
Robar666 ist noch neu hier! | 0 Respekt Punkte
Standard

Schau mal hier vorbei: [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]

Über deine Klasse und Members kannst du Attributes einfügen, die teilen dem XMLSerializer mit wie er die Klasse (genauer gesagt Objekte davon) (de)serialisieren soll.

Du musst nur mehr den XMLSerializer aufrufen:

Code:
 
  XmlSerializer serializer = new XmlSerializer(typeof(MyCoolClass));
  FileStream fs = new FileStream("MyXML.xml", FileMode.Create);
  serializer.Serialize(fs, myCoolClassObject);
  fs.Close();
Falls dir egal ist, in welchen Format deine Daten gespeichert werden könntest du dir natürlich auch einmal JSON ([ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]) zu Gemüte führen, ist um einiges kompakter als XML. Empfohlener Serializer für das .NET Framework: [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
Robar666 ist offline   Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 Uhr.


Sitemap

().