格式化XmlDocument(缩进)而不删除换行符



我有一个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);

看看这个小提琴的工作演示。

最新更新