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!!!
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);
}
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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!"
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!!!
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()
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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!!!
Schau Dir mal die Dokumentation dex XmlWriters an.
Da hast Du die Eigenschaft QuoteChar
.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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!!!