Entwickler-Ecke

IO, XML und Registry - In XML Schreiben


AeroX - Di 04.03.08 20:18
Titel: In XML Schreiben
hallo,
ich möchte elemente in meine xml-datei schrebien!


Quelltext
1:
2:
3:
4:
5:
6:
<?xml version="1.0" encoding="utf-8"?>
<Termine>
  <Termin id="08.05.2008">
    <child time="12:00">Das ist der erste Termin!</child>
  </Termin>
</Termine>


jetzt möchte ein element namens child hinzufügen, mit id!

ich habe schon bei google geguckt, jedoch habe ich nicht gescheites gefunden.

bitte helft mir!


Christian S. - Di 04.03.08 20:23

Wenn ich mir Deine Thread so ansehe: Hast Du mal dran gedacht, die XML-Dateien als Klassen abzubilden und dann mit dem XmlSerializer zu arbeiten?


AeroX - Di 04.03.08 21:27

ja, aber wie kann ich das mit der id machen?


Kha - Mi 05.03.08 18:56

Du erstellst eine Klasse Termin mit einer Property Id und fügst noch ein XmlAttributeAttribute (^^) hinzu. Alles andere macht der Serializer.
Doku => "XML serialization"/"XML-Serialisierung"


AeroX - Do 06.03.08 15:25

Ich weiß nich, ob ich zu blöd dazu bin,
aber ich suche jetzt seit 3 stunden
nach einem kleinen Beispiel,
jedoch finde ich nur welche die mindestens eine Seite lang sind.

Könntet ihr mir vl ein "kleines" Beispiel geben?


Robert_G - Fr 07.03.08 07:48

user profile iconAeroX hat folgendes geschrieben:
Könntet ihr mir vl ein "kleines" Beispiel geben?
Aus den Fingern gesaugt...
Schaue in der Doku die einzelnen Attribute an dort findest du detailiert was sie bedeuten.
Das hier sollte exakt deine Datei generieren:


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:
[XmlRoot("Termine")]
public class TerminDatei
{
  readonly List<Termin> termine = new List<Termin>();

  [XmlElement("Termin")]
  public List<Termin> Termine
  {
    get { return termine; }
  }
}

public sealed class Termin
{
  DateTime id;

  [XmlAttribute("id")]
  public DateTime Id
  {
    get { return id; }
    set { id = value; }
  }

  readonly List<Child> children = new List<Child>();

  [XmlElement("child")]
  public List<Child> Children
  {
    get { return children; }
  }
}
public sealed class Child
{
  DateTime time;

  [XmlAttribute("time")]
  public DateTime Time
  {
    get { return time; }
    set { time = value; }
  }
}


AeroX - Do 13.03.08 15:37

tut mir leid, dass ich nich zurückgeschrieben habe,
ich hatte es vorrübergehend anders gemacht.

hier mein quellcode:

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:
using System;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    [XmlRoot("Termine")]
    public class TerminDatei
    {
        readonly List<Termin> termine = new List<Termin>();

        [XmlElement("Termin")]
        public List<Termin> Termine
        {
            get { return termine; }
        }
    }

    public sealed class Termin
    {
        DateTime id;

        [XmlAttribute("id")]
        public DateTime Id
        {
            get { return id; }
            set { id = value; }
        }

        readonly List<Child> children = new List<Child>();

        [XmlElement("child")]
        public List<Child> Children
        {
            get { return children; }
        }
    }
    public sealed class Child
    {
        DateTime time;

        [XmlAttribute("time")]
        public DateTime Time
        {
            get { return time; }
            set { time = value; }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            TerminDatei uinfo = new TerminDatei();
            XmlSerializer serializer = new XmlSerializer(typeof(TerminDatei));
            StreamWriter writer = File.CreateText("test.xml");
            serializer.Serialize(writer, uinfo);
            writer.Close();

            // Zum direkten Anschauen
            StreamReader SR;
            SR = File.OpenText("test.xml");
            string S;
            while ((S = SR.ReadLine()) != null)
            {
                Console.WriteLine(S);
            }
            Console.Read();
        }
    }
}


was habe ich falsch gemacht?

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


AxxL - Mi 28.05.08 17:39

Für den Content deines Child nimm das Attribut XMLText(). In der Klasse Child also:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
private string content;
[XmlText()]
public string Content
{
   get { return this.content; }
   set{ this.content = value; }
}