Mein Ziel ist es, eine geänderte XML-Datei auszugeben und eine spezielle Einrückung beizubehalten, die in der ursprünglichen Datei vorhanden war. Das Ziel ist, dass die resultierende Datei immer noch wie das Original aussieht, wodurch sie einfacher zu vergleichen und durch die Quellcodeverwaltung zusammenzuführen sind.So verwenden Sie XDocument.Save zum Speichern einer Datei mit benutzerdefinierten Einzug für Attribute
Mein Programm wird eine XML-Datei lesen und ein bestimmtes Attribut hinzufügen oder ändern.
<Base Import="..\commom\style.xml">
<Item Width="480"
Height="500"
VAlign="Center"
Style="level1header">
(...)
In diesem Fall möchte ich einfach alle Attribute über den ersten mit dem ersten auszurichten:
Hier ist die Formatierung ich versuche zu erreichen/bewahren.
XmlWriterSettings
bietet Formatierungsoptionen, aber sie werden nicht das Ergebnis erreichen, das ich suche.
settings.Indent = true;
settings.NewLineOnAttributes = true;
Diese Einstellungen werden das erste Attribut auf einem Neue-Zeile setzen, anstatt sie auf der gleichen Linie wie die Knoten zu halten, und Attribute, die mit dem Knoten in einer Reihe aufstellen wird. Hier
ist der Load
Aufruf, die Leerzeichen zu erhalten, fragt:
MyXml = XDocument.Load(filepath, LoadOptions.PreserveWhitespace);
Aber es scheint, als ob es nicht tun, was ich erwartet hatte.
Ich habe versucht, eine benutzerdefinierte Klasse bereitzustellen, die von XmlWriter
auf den XDocument.Save
Aufruf abgeleitet ist, aber ich habe es nicht geschafft, Leerräume korrekt einzufügen, ohne in InvalidOperationException
zu laufen. Außerdem scheint diese Lösung für den kleinen Zusatz, den ich suche, übertrieben zu sein.
Als Referenz ist mein speichern nennen, nicht meine benutzerdefinierte XML-Writer (die ohnehin nicht funktioniert)
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.NewLineOnAttributes = true;
settings.OmitXmlDeclaration = true;
using (XmlWriter writer = XmlWriter.Create(filepath + "_auto", settings))
{
MyXml.Save(writer);
}
Ich glaube nicht System.XML entworfen wurde völlig willkürlich Formatierung Spezifikationen zu unterstützen. Sie könnten Ihre eigene XmlWriter-Implementierung schreiben, die Ihr spezifisches Format unterstützt, oder einfach ein Format verwenden, das von Anfang an unterstützt wird. –