Laden...

Formatänderung bei XElement.Save

Erstellt von Larsen vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.190 Views
L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 7 Jahren
Formatänderung bei XElement.Save

Hallo,

ich versuche gerade ein xml File inhaltlich zu veränder.

Dafür lese ich das File in ein XElement ein.


XElement MyXML = XElement.Load(@"p:\Name.xml");
MyXML.Save(@"p:\Name_New.xml");

und speichere es später mit .Save unter neuem Name ab.

Wenn ich die beider Files jetzt aber vergleiche auch ohne das ich was geändert habe, ist aus jedem ' ein " geworden.
z.B.:
New -> <?xml version="1.0" encoding="utf-8"?>
Old -> <?xml version='1.0' encoding='utf-8' standalone='no'?>

Kann ich irgendwie einstellen, dass das Format 1:1 übernommen wird?
Geht das überhaupt?

Gruß
Lars

...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!

16.807 Beiträge seit 2008
vor 7 Jahren

XElement Save verwendet ToString und hier wird die XDeclaration so nicht übernommen.
Arbeite mit dem XmlWriter

using (XmlWriter xmlWriter = XmlWriter.Create(@"p:\Name.xml", new XmlWriterSettings { OmitXmlDeclaration = true, Indent = true }))
{
   myXML.Save(writer);
}
6.911 Beiträge seit 2009
vor 7 Jahren

Hallo Larsen,

od. du nimmst XDocument statt dem XElement.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 7 Jahren

Danke Abt und gfoidl,

für die schnellen Antworten. Irgendwas mache ich aber noch falsch.

Habe beide Varianten (XDocument und xmlWriter) ausprobiert und bekomme bei beiden eine Ersetzung von ' -> "

Ich will in dem "original" XML nur ein paar Werte ändern muss aber dafür die Elemente suchen,
das ging mit XElement oder wahrscheinlich auch XDocument sehr bequem. Nutzt mir aber nichts,
wenn das Format geändert wird.

Habt ihr vielleicht eine andere Idee, wie ich das am besten mache? Das File sollte möglichst nicht seine ursprüngliche Form verlieren, da das dahinter liegende Tool sonst rumzickt.

Gruß
Lars

...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!

16.807 Beiträge seit 2008
vor 7 Jahren

Na wenn es verloren geht, dann fügs halt wieder hinzu 😉

XDocument doc = XDocument.Load(pfad..);

doc.Declaration = new XDeclaration("1.0", "utf-8", "no");

// ...
 
doc.Save()
L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 7 Jahren

Nee, das wieder hinzu zu fügen wäre nicht das Problem 😃 Das würde ich notfalls noch manuell machen 😃

Aber der macht in meinem neuen xml File überall aus ' -> "

Ich gebe zu, das war etwas verwirrend beschrieben.

New -> <?xml version="1.0" encoding="utf-8"?>
Old -> <?xml version='1.0' encoding='utf-8' standalone='no'?>

Hier geht's mir weniger um das fehlende "standalone='no'" als um die Formatänderung ' -> "
Im kompletten File wurde dieses Zeichen ' gegen " ausgetauscht.

In dem Tool, das die Daten weiter verarbeitet scheint das akzeptiert zu werden, aber das original Tool weigert sich das geänderte File wieder einzulesen.

Bin mir aber noch nicht ganz sicher, ob das vielleicht noch an etwas anderem liegt, wollte aber die Formatänderung schon mal ausschließen.

...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!

16.807 Beiträge seit 2008
vor 7 Jahren

Schau Dir mal die Dokumentation dex XmlWriters an.
Da hast Du die Eigenschaft QuoteChar.

L
Larsen Themenstarter:in
192 Beiträge seit 2006
vor 7 Jahren

DANKE Abt!!!!

Mit dem XmlTextWriter hab ich's endlich hinbekommen !!!

Jetzt ist auch das original Prog wieder zufrieden mit dem geänderten File 😃

Für die es interessant ist, das sieht jetzt so aus:


XElement MyXML = XElement.Load(@"p:\Name.xml");

...Modifizierung im XElement....

XmlTextWriter MyWriter = new XmlTextWriter(@"p:\Name_New.xml", null);
MyWriter.QuoteChar = (char)39;
MyWriter.Formatting = Formatting.Indented;
MyXML.Save(MyWriter);
MyWriter.Flush();


Gruß
Lars

...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!