Laden...

XML Datei speichern

Erstellt von dimuwe vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.773 Views
D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 13 Jahren
XML Datei speichern

verwendetes Datenbanksystem: XML

Hallo,
ich habe hier das Problem, dass die editierte XML nicht gespeichert wird.
Kann mir denn hier jemand helfen?


XmlDocument XMLEdit = new XmlDocument();
XMLEdit.Load( XMLPath ); // new StreamReader( XMLPath, Encoding.UTF8 ) );

XmlElement XMLEditNode = XMLEdit.DocumentElement;
foreach ( XmlNode node in XMLEditNode )
{
    if ( node.Name == SubjectID )
    {
        node.InnerText = Value;
        break;
    }
}
XMLEdit.Save( XMLPath ); -> hier Fehler

K
28 Beiträge seit 2009
vor 13 Jahren

Die Fehlermeldung wäre nicht schlecht 😉
Der Code an sich schaut richtig aus, vielleicht ein Schreibschutz auf der Datei o.ä.?

D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 13 Jahren

Vielen Dank für die Antwort.

Die Fehlermeldung ist nicht sehr aussagekräftig.
"An error message cannot be displayed because an optional resource assembly containing it cannot be found"

Das Programm läuft mit dem Compact Framework 2. Sollte doch nicht hinderlich sein, oder?

D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 13 Jahren

Hallo krai,

das mit dem Schreibschutz war schon mal gut.
Wenn ich das ganze in eine andere Datei schreibe funktioniert es.

Ich möchte aber die selbe Datei haben?
XMLEdit.Load( XMLPath );
....
XMLEdit.Save(XMLPath );

Gibt es denn irgent eine Möglichkeit die Datei nach Load wieder freizugeben?

Vielen Dank für die Hilfe.

K
28 Beiträge seit 2009
vor 13 Jahren

Das XML File hat anscheinend einen Schreibschutz, hiermit solltest du den Schutz aufheben können.


FileInfo fi= new FileInfo(filePath);
fi.Attributes &= ~FileAttributes.ReadOnly;

S
401 Beiträge seit 2008
vor 13 Jahren

XMLEdit.Load( XMLPath );
....
XMLEdit.Save(XMLPath );

Seit wann kann man mit einem Reader auf eine Platte schreiben?
Nach dem lesen der Datei benötigst du den Reader nicht mehr --> schließen, bevor du schreiben willst. Dann gibt es auch keine Seiteneffekte.

K
28 Beiträge seit 2009
vor 13 Jahren

Ich gehe davon aus, dass er direkt den Filepfad angibt, da der Reader ja auskommentiert ist.
Dann sollte das schon passen.

C
252 Beiträge seit 2007
vor 13 Jahren

Nur so als Tip.
Du könntest deinen Code vereinfachen oder ablürzen indem du Xpath oder Linq verwendest, dann sparst du dir die foreach.

D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 13 Jahren
Re

Hallo an alle,

vielen Dank für die Antworten. Ein Schreibschutz war nicht gesetzt.
Mit einem StreamReader, open und close, ging auch nicht.
Ich habe es nun gelöst, aber finde es irgentwie komisch und nicht logisch.


XmlDocument XMLEdit = new XmlDocument();
XMLEdit.Load( XMLPath );
File.Delete( XMLPath ); -> nicht logisch??
XmlNodeList XMLItems = XMLEdit.SelectNodes( "CONF" );
// and set its node value
foreach ( XmlNode node in XMLItems )
{
    node[SubjectID].InnerText = Value;
}
XMLEdit.Save( XMLPath );

1.820 Beiträge seit 2005
vor 13 Jahren

Hallo!

@dimuwe:
Interessant wäre der Code von XMLEdit.Load und XMLEdit.Save, evtl. findet man dort den Übeltäter.

Nobody is perfect. I'm sad, i'm not nobody 🙁

C
252 Beiträge seit 2007
vor 13 Jahren

tom-essen wieso denn das?
Das sind doch die Standardmethoden die das .NET Framework bereitstellt.

F
240 Beiträge seit 2006
vor 13 Jahren

tom-essen wieso denn das?
Das sind doch die Standardmethoden die das .NET Framework bereitstellt.

Du solltest dich an die naming conventions im framework halten, dann treten solche Missverständnisse nicht auf - XMLEdit sollte hier xmlEdit oder xml heißen, damit klar wird, dass es eine lokale variable ist. XMLEdit deutet durch die Großschreibung am Anfang auf eine Klasse hin.