繁体   English   中英

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

[英]Format XmlDocument (indentation) without removing line breaks

我有一个 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 = "\r\n",
  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 到 XML 是更好的 API。 您可以插入所需的空格以保持所需的格式。 例如:

var doc = XDocument.Load(inputFilePath, LoadOptions.PreserveWhitespace);

var child = doc.Elements("SomeParentElement").Elements("SomeChildElement").First();

child.AddAfterSelf(
    new XText("\r\n  "),
    new XElement("TestElement"));

doc.Save(outputFilePath);

请参阅此小提琴以获取工作演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM