Ich versuche, XML-Datei gespeichert sein Format zu bearbeiten:Neues XElements mit neuer Linie in XDocument mit PreserveWhitespace Loadoptions
<root>
<files>
<file>a</file>
<file>b</file>
<file>c</file>
<file>d</file>
</files>
</root>
So laden i XML-Dokument mit XDocument xDoc = XDocument.Load(path, LoadOptions.PreserveWhitespace);
Aber wenn ich zu versuchen bin hinzufügen neuer Elemente xDoc.Root.Element("files").Add(new XElement("test","test")); xDoc.Root.Element("files").Add(new XElement("test2","test2"));
es in der gleichen Zeile ergänzt, so ausgegeben wie:
<root>
<files>
<file>a</file>
<file>b</file>
<file>c</file>
<file>d</file>
<test>test</test><test2>test2</test2></files>
</root>
Also, wie kann ich neue Elemente in jeder neuen Zeile hinzufügen und die ursprüngliche Formatierung speichern? Ich habe versucht, XmlWriter
mit Setting.Indent = true
zu verwenden XDocument zu retten, aber wie ich sehe, sind Elemente der gleichen Zeile hinzugefügt, wenn ich xDoc.Root.Element().Add()
Update: Voll Teil der Programmladen, Modifizieren und Speichern von Dokument
using System;
using System.Xml;
using System.Xml.Linq;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string path = @".\doc.xml";
XDocument xDoc = XDocument.Load(path, LoadOptions.PreserveWhitespace);
//when i debug i see in "watch" that after these commands new elements are already added in same line
xDoc.Descendants("files").First().Add(new XElement("test", "test"));
xDoc.Descendants("files").First().Add(new XElement("test2", "test2"));
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
settings.Indent = true;
settings.IndentChars = "\t";
using (XmlWriter writer = XmlTextWriter.Create(path, settings))
{
xDoc.Save(writer);
//Here i also tried save without writer - xDoc.Save(path)
}
}
}
}
zeigen Sie eine kurze, aber * komplette * Programm zur Demonstration der Problem, einschließlich, wie Sie mit den Einrückungseinstellungen speichern ... –
Das ist immer noch kein kurzes aber komplettes Programm. Es sollte etwas sein, das wir kopieren, einfügen, kompilieren und ausführen können, ohne eine "Main" -Methode usw. hinzuzufügen. –
@JonSkeet getan, wie Sie es wünschen –