Autor Beitrag
Pruit
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 26.04.10 18:32 
Hallo allerseids!
Ich versuche zZ meine XML Datei zu verändern, bzw. ein neues Element hinzuzufügen. Dies klappt auch wunderbar.
Mein Problem ist, das ich es einfach nicht hinbekomme das neue Element an die richtige Stelle hinzuzufügen.

Hier meine Test XML:
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
<XmlNode>
<InnerNode1>
</InnerNode1>
<InnerNode2>
<Item id="1">
<name>Test</name>
</Item>
<Item id="3">
<name>Test 2</name>
</Item>
</InnerNode2>
</XmlNode>

Ich möchte ein weiteres Item in die XML-Datei einfügen.
Hier mein Code:
ausblenden 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:
// neues Element von Icon erstellen
            XmlElement newelemententry = xmldoc.CreateElement("Item");

            // neues Attribut für die ID erstellen
            XmlAttribute newelementattr = xmldoc.CreateAttribute("id");

            // Die id übergeben
            newelementattr.Value = "3";

            // Das Attribut dem xml element hinzufügen
            newelemententry.SetAttributeNode(newelementattr);

            // Das erste Element erstellen - Name - 
            XmlElement nameelement = xmldoc.CreateElement("name");

            // Element: Name bekommt Inhalt
            nameelement.InnerText = "Test 3";

            // Element: Name wird als ChildElement unserem neuen Eintrag hinzugefügt
            newelemententry.AppendChild(nameelement);

           // Hier haperts!
           xmldoc.DocumentElement.InsertAfter(newcatalogentry,xmldoc.DocumentElement.LastChild);


xmldoc.DocumentElement.InsertAfter(newcatalogentry,xmldoc.DocumentElement.LastChild);
Hier liegt das Problem.

Ich habe schon in der MSDN geguckt, ich verstehe einfach nicht wie ich ein bestimmte Node anwählen kann und es dort hineinfügen kann.
Über Hilfe würde ich mich freuen.

Mit freundlich Grüßen
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mo 26.04.10 19:39 
Hallo,

du kannst mit XPath ausdrücken (SelectSingleNode) ein beliebiges Node selektieren. Zum Beispiel mit "/XmlNode/InnerNode2" oder "/XmlNode/*[position()=2]" und dann die jeweilige InsertAfter Methode. Du solltest aber daran denken, dass der Xml-Standard es nicht vorsieht das Elemente die Reihenfolge einhalten (wobei die meisten Implementieren-Technoligien dies berücksichtigen).

Außerdem solltest du XElement/XDocument anstatt von XmlElement/XmlDocument verwenden. Diese Klassen sind schneller und konfortabler. Allerdings musste für die Verwendung von XPath den Namespace System.Linq.XPath einbinden.

Gruß
Pruit Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 26.04.10 20:10 
Hey,
Nach weiterem suchen bin ich auch auf SelectSingleNode gestoßen, hab es auch versucht anzuwenden, jedoch ohne Erfolg. Mein Fehler war die von dir gezeigte XPath Syntax. Jetzt geht es jedoch, dank deiner Hilfe!

Danke für die schnelle und gute Hilfe! :)

Mit freundlichen Grüßen.