Tôi đang cố gắng để chỉnh sửa tập tin XML tiết kiệm định dạng của nó:Thêm XElements mới với dòng sản phẩm mới trong XDocument với LoadOptions PreserveWhitespace
<root>
<files>
<file>a</file>
<file>b</file>
<file>c</file>
<file>d</file>
</files>
</root>
Vì vậy, tôi tải tài liệu xml sử dụng XDocument xDoc = XDocument.Load(path, LoadOptions.PreserveWhitespace);
Nhưng khi tôi đang cố gắng để thêm các yếu tố mới xDoc.Root.Element("files").Add(new XElement("test","test")); xDoc.Root.Element("files").Add(new XElement("test2","test2"));
nó cho biết thêm trong cùng một dòng, vì vậy sản lượng giống như:
<root>
<files>
<file>a</file>
<file>b</file>
<file>c</file>
<file>d</file>
<test>test</test><test2>test2</test2></files>
</root>
Vậy làm cách nào tôi có thể thêm các phần tử mới trên mỗi dòng mới để lưu định dạng ban đầu? Tôi cố gắng để sử dụng XmlWriter
với Setting.Indent = true
để lưu XDocument, nhưng như tôi thấy, các yếu tố được thêm vào cùng một dòng, khi tôi sử dụng xDoc.Root.Element().Add()
Cập nhật: tham gia đầy đủ của chương trình tải, sửa đổi và tiết kiệm tài liệu
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)
}
}
}
}
Hãy thể hiện một đoạn ngắn nhưng * hoàn * Chương trình thể hiện sự vấn đề, bao gồm cách bạn đang tiết kiệm với các cài đặt thụt đầu dòng ... –
Đó vẫn chưa phải là một chương trình ngắn nhưng đầy đủ. Nó phải là một cái gì đó chúng ta có thể sao chép, dán, biên dịch và chạy, mà không rối tung xung quanh thêm một phương pháp 'Main', vv –
@ JonSkeet thực hiện như bạn muốn –