我有一个XML文件要修改(添加新元素(,然后保存。问题是文件中有不应删除的空行。
这就是我目前正在做的事情:
// loading document with PreserveWhiteSpace = true
var doc = new XmlDocument { PreserveWhitespace = true };
doc.Load(inputFilePath);
// add a new element to the document
var el = doc.CreateElement("TestElement");
doc.InsertAfter(el, doc["SomeParentElement"]["SomeChildElement"]);
// save document
var settings = new XmlWriterSettings
{
Indent = true,
IndentChars = @" ",
NewLineChars = "rn",
NewLineHandling = NewLineHandling.Replace,
OmitXmlDeclaration = true
};
using (var writer = XmlWriter.Create(outputFilePath, settings))
{
doc.Save(writer);
}
在加载之前,我将文档PreserveWhitespace
设置为true,这样换行符就不会被忽略。因此,我在doc["SomeParentElement"]["SomeChildElement"]
之后添加的新元素不会从新行开始,如果我自己添加换行符,也不会有正确的缩进。我尝试了XmlWriterSetting中的许多设置,但当PreserveWhitespace
设置为true时,其中的设置似乎都不起作用。
是否可以将一个新元素插入到xml文件中,并以良好的格式保存,但不删除文档中的空行?
示例:
<SomeParentElement>
<SomeChildElement/>
<SomeChildElement2/>
<SomeChildElement3/>
</SomeParentElement>
运行上面的代码后应该是这样的:
<SomeParentElement>
<SomeChildElement/>
<TestElement/>
<SomeChildElement2/>
<SomeChildElement3/>
</SomeParentElement>
我通常建议LINQ to XML是一个更好的API。您可以插入所需的空白,以保持所需的格式。例如:
var doc = XDocument.Load(inputFilePath, LoadOptions.PreserveWhitespace);
var child = doc.Elements("SomeParentElement").Elements("SomeChildElement").First();
child.AddAfterSelf(
new XText("rn "),
new XElement("TestElement"));
doc.Save(outputFilePath);
看看这个小提琴的工作演示。