Problem mit Xml Document und AppendChild Methode

so langsam wirds schon etwas peinlich, aber ich muss nochmal eure hilfe in anspruch nehmen.

mittlerweile bin ich soweit, das ich aus xml Dokumente bestimmte Nodes gezielt auslesen, editieren und löschen kann.
Jetzt hab ich das problem mit dem hinzufügen:

ich weiß das ich die Methode AppendChild brauche aber die MSDN hilft mir nicht weiter. Auch etwas zusammenschustern mit Hilfe von altem Code zum editieren etc hat mich nicht weitergebracht.

ich hab jetzt testweise ne file erstellt die nur den rootTag beinhaltet

aber wie kann ich jetzt ein element erstellen es mit einem Attribut + zugehörigen wert versehen und da reinschreiben.

ich würde in diesem fall xpath bevorzugen da er später auch childs in subtags hinzufügen soll

z.B. so

und dann hier ein Nodeeinfügen

hab etwas zusammengeschustert was so etwa in die richtung hinkommt:

XmlDocument doc = new XmlDocument();
doc.Load(strFile);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
XmlElement xmlRootElement = doc.DocumentElement;
XmlAttribute xmlAttr = doc.CreateAttribute(„AreaName“);
xmlAttr.Value = strAreaName;
XmlNode xmlElement = xmlRootElement.SelectSingleNode("/configuration", nsmgr);
XmlNode xmlNewElement = xmlElement.OwnerDocument.CreateElement(„area“);
xmlNewElement.Attributes.Append(xmlAttr);
xmlElement.ParentNode.AppendChild(xmlNewElement);
doc.Save(strFile);

Gelöst
neuer tag neuer anfang:
hab die richtige lösung „geträumt“ und bin noch selbst draufgekommen

XmlDocument doc = new XmlDocument();
doc.Load(strFile);
XmlElement xmlRootElement = doc.DocumentElement;
XmlAttribute xmlAttr = doc.CreateAttribute(„AreaName“);
xmlAttr.Value = strAreaName;
XmlNode xmlNewElement = xmlRootElement.OwnerDocument.CreateElement(„area“);
xmlNewElement.Attributes.Append(xmlAttr);
xmlRootElement.AppendChild(xmlNewElement);
doc.Save(strFile);

Hi St@tic,

Is ja interessant, jetzt ohne namespacemanager …
(Kannst du mir sagen was der machen sollte?)

Ein Vorschlag zum Code:
XmlDocument doc = new XmlDocument();
doc.Load(strFile);
//wo soll´s rein
string xPath = „root“;
//hoffe das stimmt so, xPath muß ich immer ausprobieren …
XmlElement toInsertElement = doc.SelectSingleNode(xPath);
//da du nicht immer direkt unter der root einfügen willst
//aufpassen: Gibt es mehrere Elemente die xPath liefern würde
//wird das erste verwendet!

XmlAttribute xmlAttr = doc.CreateAttribute(„AreaName“);
//da das Attribut letzlich eh an ein bestimtes Tag kommt
//einfach ins doc, das geht immer
xmlAttr.Value = strAreaName;
XmlNode xmlNewElement = doc.CreateElement(„area“);
//wie du ja hier auch siehst
xmlNewElement.Attributes.Append(xmlAttr);

//und jetzt einbauen
toInsertElement.AppendChild(xmlNewElement);
doc.Save(strFile);

Das ist zwar im wesentlichen unverändert, vieleicht hilft es aber zum Verständnis und es sit so allgemeiner.

Habs zwar nicht getestet, aber sollte so stimmen.

mfg

Dirk

ehrlich gesagt weiß ich bis heut noch net wofür der namespace manager erforderlich ist :smile:
hier ist er auchgetaucht weil ich aus ner anderen klasse den code kopiert hab und abändern wollte.
anscheinend is er da reingerutscht…

so langsam krieg ich das ganze prinzip raus.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]