簡體   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