我试图编辑XML文件,保存它的格式:
<root>
<files>
<file>a</file>
<file>b</file>
<file>c</file>
<file>d</file>
</files>
</root>因此,我使用
XDocument xDoc = XDocument.Load(path, LoadOptions.PreserveWhitespace);
但当我试图添加新元素时
xDoc.Root.Element("files").Add(new XElement("test","test")); xDoc.Root.Element("files").Add(new XElement("test2","test2"));
它在同一行中添加,因此输出类似于:
<root>
<files>
<file>a</file>
<file>b</file>
<file>c</file>
<file>d</file>
<test>test</test><test2>test2</test2></files>
</root>那么,我如何在新行中添加新元素,以保存初始格式?我尝试使用XmlWriter与Setting.Indent = true一起保存XDocument,但正如我所看到的,元素在使用xDoc.Root.Element().Add()时会添加到同一行中。
更新:完整的程序加载、修改和保存文档。
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)
}
}
}
}发布于 2014-12-18 14:09:31
这个问题似乎是由您使用LoadOptions.PreserveWhitespace引起的。这似乎超过了XmlWriterSettings.Indent -你基本上说过,“我关心这个空格”.“哦,现在我不知道了。”
如果删除该选项,只需使用:
XDocument xDoc = XDocument.Load(path);..。然后适当地缩进。如果您想保留所有原始空白,但只缩进新元素,我认为您需要自己添加缩进。
发布于 2015-03-31 18:53:36
我有一个类似的问题,我可以用下面的代码来解决:
var newPolygon = new XElement(doc.Root.GetDefaultNamespace() + "polygon");
groupElement.Add(newPolygon);
groupElement.Add(Environment.NewLine); 我希望这个密码能帮助一些人..。
https://stackoverflow.com/questions/27548227
复制相似问题