Laden...

XML: Knoten hinzufügen

Erstellt von HerrRossi vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.550 Views
H
HerrRossi Themenstarter:in
30 Beiträge seit 2007
vor 16 Jahren
XML: Knoten hinzufügen

Hallo zusammen,
ich finde leider keine guten Beispiele oder Beschreibungen im Netz wie ich in eine XML-Datei um Unterknoten erweitern kann. Auch wildes rumprobieren hat mich kein Schritt vorangebracht. So was will ich machen:

Ich habe eine XML-Datei die ungefähr so aussieht:


<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!--Software: TankManager v1.0-->
<root>
   <etappe datum="6/22/07">
      <gefahren>614.9</gefahren>
      <preis>1.399</preis>
      <liter>39.99</liter>
   </etappe>
</root>

Nun soll eine neue "Etappe"(mit allen Subknoten) unter dem root-Tag hinzugefügt werden, aber wie? Angeblich soll DOM solche Funktionen bieten, aber ich habe kein blassen schimmer wie.
Mein Ansatz sieht so aus:


XmlDocument doc = new XmlDocument();
try
{
   doc.Load(xmlfile);
}
catch
{
   return false;
}
//... Aber was kommt hier hin????
doc.Save(xmlfile);

Helft mir bevor ich noch anfange zu heulen 😉

G
497 Beiträge seit 2006
vor 16 Jahren

du kannst über doc.CreateElement neue Nodes erzeugen. Die müssen dann einem XmlNode über XmlNode.AppendChild() hinzugefügt werden. In deinem Fall hat das Dokument ein RootNode namens "root", diesem Rootnode musst du die neuen Etappen-Nodes hinzufügen. Die zu einem Knoten gehörenden Unterknoten findest du jeweils als XmlNode-Auflistung in der Eigenschaft ChildNodes. Attribute wie "datum" werden über doc.CreateAttribute() erzeugt und müssen ebenfalls dem Node hinzugefügt werden (diesmal über XmlNode.Attributes.Append()), das das Attribut erhalten soll.

Um durch ein Xml-Dokument zu navigieren (beispielsweise, um es Stück für Stück zu verarbeiten), ist der XPathNavigator ganz praktisch (System.Xml.XPath.XPathNavigator).

H
HerrRossi Themenstarter:in
30 Beiträge seit 2007
vor 16 Jahren

Ja so ähnlich hab ich das Probiert.

...
XmlNode rootNode = doc.CreateElement(rnode);
XmlNode subNode = doc.CreateElement(etappe.nodeEtappe);
XmlAttribute datumAttr = doc.CreateAttribute(etappe.attrDatum);
datumAttr.Value = etappe.datum;
subNode.Attributes.Append(datumAttr);
XmlNode gefahrenNode = doc.CreateElement(etappe.tagGefahren);
gefahrenNode.InnerText = etappe.gefahren;
subNode.AppendChild(gefahrenNode);
XmlNode preisNode = doc.CreateElement(etappe.tagPreis);
preisNode.InnerText = etappe.preis;
subNode.AppendChild(preisNode);
XmlNode literNode = doc.CreateElement(etappe.tagLiter);
literNode.InnerText = etappe.liter;
subNode.AppendChild(literNode);
rootNode.AppendChild(subNode);
doc.AppendChild(rootNode);  // DocElemet vorhanden

doc.Save(xmlfile);

Bei diesem Befehl macht der Debugger ein Fehler, und sagt das schon eine Element vorhanden ist.
doc.AppendChild(rootNode);
Also irgendwas verstehe ich scheinbar noch nicht bei der Node Erstellung nicht. Nur was ist mir schleierhaft. Ich denke da ist ein grundlegender Denkfehler meinerseits und da muss mir doch jemand raus helfen können.

476 Beiträge seit 2004
vor 16 Jahren

hallo HerrRossi,

so wie es aussieht versuchst du einen zweiten root-Knoten zu deinem XML-Dokument hinzuzufügen. Du müsstest dir den root-Knoten aus deinem XML-Dokument zurückgeben lassen und dort deinen neuen "etappen"-Knoten anfügen.

-yellow

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

Mein Blog: Yellow's Blog auf sqlgut.de