C# XML Speicherung

LieberNet

Mitglied
C# XML Speicherung xmlDoc.CreateNode

Hallo
Kann mir jemand bei meinem Problem helfen. Ich habe die Anforderung ein bestehendes XML File (UTF8 Coding) zu bearbeiten. Lt. MSN kann dazu eine neue Node mittels XmlDocument.CreateNode (NodeType,Name;NSURI) erstellt werden. Das funktioniert auch soweit. Eine Node wird angefügt. Allerdings steht am Ende der Node noch ein String xmlns="". Und dieser verursacht beim Lesen Probleme.
Folgendes Format soll erstellt werden:
<Property Name="DPLimit" Value="Default" />
aber dieses wird erzeugt
<Property Name="DPLimit" Value="Default" xmlns="" />
Beim Ändern der Attribute Values funktioniert alles einwandfrei. Nur beim generieren von neuen Nodes geht das nicht.
Hat hier jemand eine Idee woran es scheitert?
Habe als NameSpaceURI schon null, "" oder Document.NameSpaceURI erfolglos probiert.

Danke im vorraus
Max
 
Zuletzt bearbeitet:
Hallo,
ich würde es mit XmlTextWriter machen.
Codebeispiel:
PHP:
XmlTextWriter xmlTextWriter = null;

xmlTextWriter = new XmlTextWriter("test.xml", Encoding.UTF8);

xmlTextWriter.WriteStartDocument(true);

xmlTextWriter.WriteStartElement("property");
xmlTextWriter.WriteAttributeString("Name", " DPLimit");
xmlTextWriter.WriteEndElement();

xmlTextWriter.WriteEndDocument();
xmlTextWriter.Close();

text.xml
PHP:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<property Name="DPLimit">
</property>


mfg Jens
 
Hallo Jens
Wenn ich ein neues XML Doc mache habe ich ja auch kein Problem. Ich MUSS leider in ein bestehendes XML File reinschreiben. Ich habe dazu mittels XML Document Class das gesamte XML File durchgeparst und mir die Daten rausgesammelt, die ich für mein Programm brauche (inklusive der xml node für das jeweilige Objekt). Wenn ich nun einem dieser Objekte eine neue Node hinzufügen möchte und das Document schlußendlich speichere, bekomme ich diesen zusätzlich String. Wird nur eines der Attributes geändert, funktioniert alles wunderbar. Irgendwie macht mir der Übergabeparameter NameSpaceURI in der XMLDoc.CreateNode () Funktion Probleme. Wenn Du nun in Dein bestehendes XML File versuchst eine neue Node einzufügen (ohne das File neu zu erstellen), hast Du vielleicht das gleiche Problem.

Trotzdem Danke für die rasche Antwort
Gruß
Max
 
Vorschlag
Lade alle Daten raus in einen Stream, modiefziere den Stream und dann lösche File und erstelle im gegen Zug gleich neu. Das was du machen willst geht nicht wirklich ohne das File neuzuerstellen, weil ich kann zwischen "AB" kein C schieben ohne das File löschen.
Da ich ja das B nach hintern schieben muss. Anderfalls zerstöre ich die XML-Struktur.

So würde ich machen. Ich weiß das es nicht die feine Englische Art ist, aber ich lebe ja in Deutschland. :)

Beispiel aus einem Buch:
using System.Xml;
using System.IO;

XmlTextWriter xw = new XmlTextWriter(" DATEINAME.xml");
xw.Formatting = Indented;
xw.WriteStartDocument();
xw.WriteStartElement(" Beispiel ");
xw.Write(" Hallo Welt ");
xw.WriteEndElement();
xw.WriteEndDocument();

so kannst du keinen xml-Fehler machen
 
Zuletzt bearbeitet:
Das mache ich eigentlich auch schon so. Im Prinzip habe ich mein XML File im Speicher über das XmlDoc. Von diesem Doc sind die einzelnen Nodes an meine Objekte angeschlossen und an diese füge ich ganz einfach eine neue Node. Das sollte auch der Vorteil von xml sein. Ansonsten macht dieser XML Baum Aufbau ja keinen Sinn. Am Schluß wird das File so gesehen sowieso neu geschrieben -> über Doc.Save(Filename). Und genau hier wird mir dann diese Node "falsch" gespeichert. Dieses xmlns dachte ich sollte nur bei der Rootnode stehen. Das File über meine Daten selbst neu zu erstellen ist auf jeden Fall keine Alternative, da es sich hier um ca. 650 kB Daten handelt und diese im XML Baum ziemlich dynamisch abgelegt sind. Ich diese zwar sehr einfach über rekursive Aufrufe lesen, aber schreiben würde zu lange dauern!
 
Habe mein Problem endlich lösen können. Für alle die, die das Problem auch mal bekommen. Ich habe in meinem XML einen NameSpace vergeben. Dieser wird im XML bei der Rootnode angeführt. Nimmt man nun den NameSpaceURI des DOC wird ein zusätzlicher NameSpaceURI für die neue Node vergeben. Wenn ich aber den NamespaceUri der Rootnode an die neue Node anknüpfe, funktioniert wieder alles wunderbar.
 
Zurück