Forum: PC-Programmierung C# xml Unterebene Einfügen


von Fragender (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein Problem bei einem c# Programm. Ich möchte eine xml Datei 
erzeugen, die mehrere Ebenen hat. In der Untersten Ebene sollen Daten 
stehen.
Mein Problem ist, dass ich keine zwei Unterbenenen hinbekomme.

so soll das ganze aussehen:
1
<?xml version="1.0" standalone="yes"?>
2
<file xmlns="test">
3
  <dataset>
4
    <data test1="1" test2="2" />
5
  </dataset>
6
</file>

so sieht es bisher aus:
1
<?xml version="1.0" standalone="yes"?>
2
<file xmlns="test">
3
  <data test1="1" test2="2" />
4
</file>

mein Code dafür ist:
1
XmlDocument doc = new XmlDocument();
2
           
3
XmlDeclaration Decl = doc.CreateXmlDeclaration("1.0", null, null);
4
doc.AppendChild(Decl);
5
6
XmlNode myRoot = doc.CreateElement("file");            
7
XmlAttribute atrr = doc.CreateAttribute("xmlns");
8
            
9
atrr.Value = "test";
10
myRoot.Attributes.Append(atrr);
11
            
12
doc.AppendChild(myRoot);
13
14
myRoot.AppendChild(doc.CreateElement("data"));
15
            myRoot.SelectSingleNode("data").Attributes.Append(doc.CreateAttribute("test1")).InnerText = "1";
16
 
17
myRoot.SelectSingleNode("data").Attributes.Append(doc.CreateAttribute("test2")).InnerText = "2";           
18
    
19
doc.Save(xml_temp);

Gruß

von Karl H. (kbuchegg)


Lesenswert?

Fragender schrieb:

> mein Code dafür ist:

Ich seh in deinem Code nichts, wo du eine zusätzliche 'Ebene' für das 
Dataset einfügen würdest.

Sieh dir einfach noch mal die Version an, die du haben willst. Wer ist 
'Child' von wem? Welche XmlNode musst du erzeugen? Und welchen Node 
fügst du bei wem mittels Append hinzu?

von Karl H. (kbuchegg)


Lesenswert?

Und wenn du hier
1
   myRoot.AppendChild(doc.CreateElement("data"));

anstelle der 'Rundumschlagmethode' ganz einfach eine Zwischenvariable 
benutzt
1
  XmlNode dataNode = doc.CreateElement("data");
2
  myRoot.AppendChild( dataNode );

dann brauchst du hier
1
            myRoot.SelectSingleNode("data").Attributes.Append(doc.CreateAttribute("test1")).InnerText = "1";

nicht wie ein Wilder von der Root ausgehen den gerade erst erzeugten 
Node suchen, sondern kannst ganz einfach mittels
1
  dataNode.Attributes.Append(doc.CreateAttribute("test1")).InnerText = "1";
den Attributen dieses gerade erst erzeugten XmlNode ein neues Attribut 
hinzufügen.

Wenn du noch nicht so firm bist, solltest du der Versuchung widerstehen, 
alles so dicht wie möglich zu schreiben. Ein paar Hilfsvariablen schaden 
nicht und alles wird gleich viel klarer. Und PS: Dein Strukturproblem 
wird damit geradezu trivial.

von Fragender (Gast)


Lesenswert?

Hallo,

danke für den Denkanstoss. Jetzt habe ich es hinbekommen indem ich 
Hilfsvariablen eingefügt und nochmal überlegt habe, wer child von was 
ist.
1
XmlNode dataRoot = doc.CreateElement("dataset");
2
XmlNode dataNode = doc.CreateElement("data");
3
4
myRoot.AppendChild(dataRoot);
5
dataRoot.AppendChild(dataNode);

Gruß

von Markus B. (markusborti)


Lesenswert?

Nur mal als kleinen Denkanstoß:
Für XML finde ich LINQ recht gut.
Das nimmt dir viele Sachen ab und die Syntax lässt sich später auch für 
SQL verwenden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.