Laden...

Einfaches XML Objekt aufbauen - bin zu blöd dazu

Erstellt von firefighter99 vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.645 Views
F
firefighter99 Themenstarter:in
10 Beiträge seit 2004
vor 17 Jahren
Einfaches XML Objekt aufbauen - bin zu blöd dazu

Hallo Leute,

ich steh irgendwie total auf dem Schlauch und würde gern Eure Hilfe in Anspruch nehmen (VS 2005).

Ziel ist folgendes XML-Struktur als Objekt zu besitzen:


<Hauptstamm>
 <Block>
  <Satz>
   <Attribute1>abc</Attribute1>
   <Attribute2>abc</Attribute2>
   <Attribute3>abc</Attribute3>
  </Satz>
  <Satz>
   <Attribute1>abc</Attribute1>
   <Attribute2>abc</Attribute2>
   <Attribute3>abc</Attribute3>
  </Satz>
 </Block>
 <Block>
  <Satz>
   <Attribute1>abc</Attribute1>
   <Attribute2>abc</Attribute2>
   <Attribute3>abc</Attribute3>
  </Satz>
  <Satz>
   <Attribute1>abc</Attribute1>
   <Attribute2>abc</Attribute2>
   <Attribute3>abc</Attribute3>
  </Satz>
 </Block>
</Hauptstamm>

d.h. in einer XML Datei kann es mehrere Blöcke geben wovon jeder mehrere Sätze besitzen kann. Diese Sätze haben Attribute....

Mein Ansatz war Folgender (zusammenkopiert):



XmlDocument _xmlValidData = new XmlDocument();

XmlNode xmlNode;

//Starttag 
xmlNode= this._xmlValidData.CreateElement("Hauptstamm");
this._xmlValidData.AppendChild(xmlNode);

XmlNode xmlNodeDataBlock;

// Open BlockTag
xmlNodeDataBlock = this._xmlValidData.CreateElement("DataBlock");
this._xmlValidData.AppendChild(xmlNodeDataBlock);

XmlElement xmlNodeDataSet;


xmlNodeDataSet = this._xmlValidData.CreateElement("DataSet");
this._xmlValidData.AppendChild(xmlNodeDataSet);

// Set Attributes
XmlAttribute xmlAttribValid = this._xmlValidData.CreateAttribute("Attribute1");
xmlAttribValid.Value = bIsValid.ToString(); // das bIsValid kommt von woanders...
xmlNodeDataSet.SetAttributeNode(xmlAttribValid);

// Set Data Attribute
XmlAttribute xmlAttribData = this._xmlValidData.CreateAttribute("Attribute2");
xmlAttribData.Value = sData;
xmlNodeDataSet.SetAttributeNode(xmlAttribData);

// Set Answer Attribute
XmlAttribute xmlAttribAnswer = this._xmlValidData.CreateAttribute("Attribute3");
xmlAttribAnswer.Value = sAnswer;
xmlNodeDataSet.SetAttributeNode(xmlAttribAnswer);


Könnte mir das bitte jemand erklären und den Code gerade biegen? Danke!

476 Beiträge seit 2004
vor 17 Jahren

hallo firefighter,

du erwartest doch nicht wirklich, dass sich jemand hinsitzt und dir deinen zusammenkopierten Code gerade biegt? Du wolltest ganz bestimmt fragen, kann mir jemand helfen und mir einen Tipp geben wo ich mit meiner Grundlagenforschung am besten beginne?

Darauf antworten wir natürlich gern 😄:

myCSharp-Forumsuche
System.Xml-Namespace
Terrashop: XML mit .NET

...um nur ein paar mögliche Quellen zu nennen.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

F
firefighter99 Themenstarter:in
10 Beiträge seit 2004
vor 17 Jahren

Original von Yellow
hallo firefighter,

du erwartest doch nicht wirklich, dass sich jemand hinsitzt und dir deinen zusammenkopierten Code gerade biegt? Du wolltest ganz bestimmt fragen, kann mir jemand helfen und mir einen Tipp geben wo ich mit meiner Grundlagenforschung am besten beginne?

Darauf antworten wir natürlich gern 😄:


>


>


>

...um nur ein paar mögliche Quellen zu nennen.

-yellow

Jein! 🙂
Ich habe gehofft, dass mir jemand sagen kann warum ich auf dem Holzweg bin und was ich übersehe/nicht verstanden habe. Halt die typische Community Frage.

Dein Antwort ist zwar sehr freundlich, aber - bitte nicht böse nehmen - da hätt ich auch google Fragen können. Und das habe ich nach 3 Stunden Googlesuche auch langsam satt. Und wenn so ein Problem zeitkritisch ist (für mich), dann ist der Hinweis auf ein Buch fast Hohn. 🙁

Trotzdem danke erstmal, vielleicht teilt mir ein anderes Mitglied etwas eigenes Wissen mit?

476 Beiträge seit 2004
vor 17 Jahren

hallo firefighter,

nuja, was ich damit sagen wollte, ist folgendes. Wenn Du ein bisschen Eigeninitiative zeigst, hilft Dir auch ganz bestimmt jemand, aber deine Hausaufgaben macht Dir niemand.


XmlDocument _xmlValidData = new XmlDocument();
XmlNode xmlNode;

//Starttag
xmlNode= this._xmlValidData.CreateElement("Hauptstamm");
this._xmlValidData.AppendChild(xmlNode);

soweit so gut. Du erstellst ein XmlNode und fügst es dann dem XmlDocument hinzu.


XmlNode xmlNodeDataBlock;

// Open BlockTag
xmlNodeDataBlock = this._xmlValidData.CreateElement("DataBlock");
this._xmlValidData.AppendChild(xmlNodeDataBlock);

XmlElement xmlNodeDataSet;

aber hier beginnt schon der Wurm drin zu stecken. Zu aller erst hat das neue Element den falschen Namen (DataBlock -> Block). Dann fügst du den Knoten an dein XmlDocument an, das heisst auf der selben Ebene wie den ersten Knoten. Das ist nicht was du willst, und darf auch nicht sein denn ein XML-Dokument darf nur einen Root-Knoten besitzen um valide zu sein. Was du machen musst, ist den neuen Knoten als Child von deinem "Hauptstamm"-Knoten hinzufügen.


this._xmlValidData.DocumentElement.AppendChild(xmlNodeDataBlock);

und für die nachfolgendenen Knoten musst du eben entsprechend verfahren. Wenn deine Attribute-Felder wie im obigen Beispiel auch XmlNode's sein sollen, dann musst du die auch als XmlNode's erstellen und nicht als XmlAttributes.

Aber, ganz ehrlich gesagt, das sind Grundlagen. Und wenn Du dir die Mühe gemacht hast, in google danach zu suchen, dann müsstest du aufjedenfall die richtigen Hinweise gefunden haben. Wenn nicht, würdest du sie zumindest unter den bereits genannten Links finden.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

F
firefighter99 Themenstarter:in
10 Beiträge seit 2004
vor 17 Jahren

Danke, das half mir schon eine ganze Ecke weiter 🙂