XmlDocument WellFormed speichern

langsam wirds richtig peinlich für mich, ständig hier threads aufmachen zu müssen. ich hab mittlerweile alles so wie ich es haben will lesen und schreiben geht einwandfrei in die xml datei

allerdings wenn ich das xmldocument mit save() speichern will knallt er mir alles in eine zeile und da gibts dann später probleme beim wieder einlesen (ne exception wird bei load() oder beim instanzieren des namespacemanagers geworfen. das kann ich net genau sagen)
deswegen würd ich gerne jede ebene in ne extra zeile schreiben und einrücken damit er keine probleme beim einlesen hat
z.b. so

Wert1Wert2

usw.
natürlich wollte ich mir zuerst selbst ne lösung erarbeiten aber mehrere möglichkeiten haben nicht funktioniert

XmlTextWriter xmlTWriter = new XmlTextWriter(new StreamWriter(„config/config.xml“));
XmlTextWriter xmlTWriter = new XmlTextWriter(„config/config.xml“ ,System.Text.Encoding.UTF8);
FileStream fs = new FileStream(„config/config.xml“,FileMode.Truncate, FileAccess.Write, FileShare.None);
XmlTextWriter xtw = new XmlTextWriter(fs);

dann hab ich es noch mit nem streamwriter nem textwriter und nem xmlwriter probiert (nur der xmlwriter will keine argumente übergeben haben)

spachen will ich einfach mit doc.save(xmlTWriter);
aber er ballert mir wie gesagt alles in eine zeile rein

ich bedanke mich für eure hilfe und geduld



…Wert1
…Wert2

so solls aussehen!!!

XmlDocument WellFormed speichern
Hi St@tic

langsam wirds richtig peinlich für mich

kann garnicht sein. Wie war das mit den dummen Fragen? Gibts nicht!

Also:
Zum Umbruch:
Soviel ich weiß ist der Umbruch (einrücken etc.) völlig egal. Der Stream kann trotzdem valide sein. Ich lade solche Streams ins Visual Studio und lass ihn mir da formatieren. Klappt echt gut, wenn er valide ist, sonst sagt der „Fehler in Zeile 1“. Dann berch ich den Strom pö a pö auf, bis ich genau die Zeile finde.

Ich glaube, das dein XML schon kaputt ist. Wie baust du das denn?
Wenn man immer brav mit CreateNode und solchen Sachen arbeitet, sollte eigentlich nix passieren. Ich nehm schonmal einen String zur Hilfe, dann raschelts aber …

Textpassagen (so mit ä und ? und solchen Sachen) sollte man in ein CDATA kapseln. Ist sicherer (mach ich aber auch nicht immer …)

Zur Ausgabe, zum Anschauen:
Entweder Response.Write(doc.OuterXml);
oder per XmlDocument docWrite.load("[CDATA[" + Server.HTMLEncode(doc.OuterXml) + „]]“);
docWrite.save(fileName);
Hoffe das CDATA sitzt richtig.

Kannst du das debuggen? Wär doch klasse sich mal anzusehen, wie son ein xml entsteht.

mfg

Dirk

also ob alles in einer zeile steht oder nicht scheint doch ausschlaggebend zu sein, auch die xml file scheint korrekt zu sein.

da bin ich mir sicher. da wenn ich die xml file (welche ich in nem texteditor erstellt hab) reinlade mit umbrüchen und einrückungen dann funktioniert alles einwandfrei. wenn ich die datei speichere (so dass sie in einer zeile steht) dann stürzt mir entweder das doc.load oder der namespacemanager ab (zumindest bleibt der debugger in der zeile stehen wo der namespacemanager instanziert wird)

gibts keine möglichkeit die xml file wellformed zu speichern???

WellFormed speichern
Hi static

also ob alles in einer zeile steht oder nicht scheint doch
ausschlaggebend zu sein, auch die xml file scheint korrekt zu
sein.

Will ich eigentlich nicht glauben

da bin ich mir sicher. da wenn ich die xml file (welche ich in
nem texteditor erstellt hab) reinlade mit umbrüchen und
einrückungen dann funktioniert alles einwandfrei. wenn ich die
datei speichere (so dass sie in einer zeile steht) dann stürzt
mir entweder das doc.load oder der namespacemanager ab

aha, Speicherst du ohne etwas zu ändern? Das macht ja kaum Sinn, also: Was tust du? Der namespacemanager ist mir fremd, brauchst du den? Eigentlich sollte ein Namespace nicht erforderlich sein, oder hast du noch „Geheimnisse“?

(zumindest bleibt der debugger in der zeile stehen wo der
namespacemanager instanziert wird)

Dann dürfte da auch was schiefgehen! Kriegst du eine Fehlermeldung?

Hast du mal versucht dir den Stream direkt vor dem Speichern anzuzeigen oder anders (Textfile oder "gekapselt) zu speichern?

gibts keine möglichkeit die xml file wellformed zu
speichern???

Klar, aber wellformed mußt du erst erreichen! Benutzt du DTDs oder xsd zur validierung?

Ich bleib dabei: Die Umbrüche etc. sind entbehrlich. Der Stream ist wohl „kaputt“, vor dem Speichern. Hast du die Datei mal in den IE geladen? Der sollte ja ein XML darstellen können (vor allem ohne xslt!) Dazu mus der Parser installiert sein.

mfg

Dirk

ich mus nochmal mein problem erklären, anscheinend ist das nicht ganz klar.

ich hab eine xml datei erstellt mit umbrüchen und einrücken sowie geschlossene tags (das bezeichne ich als wellformed auch wenns net ganz korrekt sein mag)
diese datei hab ich in nem texteditor erstellt.
wenn ich jetzt meine klasse zum laden von einstellungen gehe dan funktioniert alles wunderbar. wenn ich jetzt was verändere und dann speichere (ist ne eigene klasse zum speichern) dann speichert er die veränderte datei. allerdings wird alles in eine zeile geschrieben ohne umbrüche und ohne einrücken. wenn ich jetzt wieder die werte laden will dann stürzt mir das programm ab.

also denke ich das es was mit der formatierung zu tun hat. weil wenn ich dann ne sicherungskopie wieder umbenne in den dateinamen und die editierte file lösche dann funktioniert wieder alles.

mit dtds etc arbeite ich noch nicht, weil erstmal das lesen und schreiben richtig funktionieren soll.

im ie hab ich das noch nicht angezeigt gekriegt.
allerdings kriege ich eine fehlermeldung. welche kann ich nicht genau sagen weil ich jetzt erstmal 1 woche urlaub machen muss und zuhause kein visualstudio hab und wenn ich z.b um den namespacemanager nen try catch setze dann findet er das objekt nicht mehr das irgendwo noch verwendet wird.

Hallo st@tic

im ie hab ich das noch nicht angezeigt gekriegt.
allerdings kriege ich eine fehlermeldung. welche kann ich

Die solltest du dir mal anschauen! Wenn der schon nicht anzeigt?

nicht genau sagen weil ich jetzt erstmal 1 woche urlaub machen
muss und zuhause kein visualstudio hab und wenn ich z.b um den

Geht mir auch so (freu)
Wenn der schöne Urlaub vorbei ist: Lad mal das xml File in VS. Der sollte das schön formatieren (einfach auf Daten umschalten)

namespacemanager nen try catch setze dann findet er das objekt
nicht mehr das irgendwo noch verwendet wird.

Das scheint mir aber seltsam …

Wie speicherst du die Daten?
XmlDocument doc = new XmlDocument();
doc.Save(fileName);

oder anders?

mfg

Dirk

Wie speicherst du die Daten?
XmlDocument doc = new XmlDocument();
doc.Save(fileName);

eigentlich ist mir ein xmlwriter oder so in den sinn gekommen. habs mal eben so ausprobiert mit save(filename) mit der methode speichert er es so wie es sein sollte